(轉)Unity3D研究院之遊戲架構腳本該如何來寫(三十九)

 這篇文章MOMO主要想你們說明一下我在Unity3D遊戲開發中是如何寫遊戲腳本的,對於Unity3D這套遊戲引擎來講入門極快,但是要想作好卻很是的難。這篇文章的目的是讓哪些已經上手Unity3D遊戲引擎的朋友學會如何更好的寫遊戲腳本,固然本文這牢牢是我這麼多年對遊戲開發的認知,你也能夠有你本身的見解。首先咱們看看遊戲主要是由哪幾部分組成的,以下圖所示,任何平臺下的任何遊戲核心都是由:數據、邏輯、渲染三大部分組成。程序員

當你寫過》=2個平臺下的遊戲時你會發現其實遊戲開發很「容易」,爲何「容易」呢?由於此時你會發現全部平臺下開發遊戲的模式,以下圖中的「數據」與「邏輯」兩部分真的是徹底同樣的,這兩部分是與遊戲開發平臺無關的。然而真正與遊戲平臺有關的牢牢是「渲染」這部分,由於各個遊戲平臺下的渲染接口是不一樣的。這也就印證了一點,能把J2ME遊戲寫好的程序員就必然能把IOS或Android遊戲一樣的寫好。讀到這裏請結合一下你的公司狀況,你可能會發如今你的技術總監兩三天就能上手Unity3D遊戲開發 Cocos2d遊戲開發,這並非他對遊戲平臺研究的透徹,而是他對遊戲數據的掌控能力很是強,因此能很快玩轉各個平臺下的開發。安全

         以下圖所示,Unity3D這套遊戲引擎在遊戲開發中的權重如圖中所示。其中包含100%的渲染部分 +50%左右的邏輯部分。(由於Unity3D封裝了不少與邏輯相關的API供開發者使用)架構

        下面咱們回到Unity3D腳本架構的編寫上,咱們知道Unity3D在是能夠建立遊戲場景的,在每一個遊戲場景中又能夠建立遊戲對象,把每一個場景的遊戲對象融合在一塊兒就是一款3D遊戲。遊戲場景之間屬於同等級的關係,爲了讓遊戲場景以前交互咱們須要有一個凌駕全部場景之上的腳本,我稱之爲「全局腳本」。以下圖所示,全部場景都能與這個惟一的全局腳本進行交互。舉個例子,當場景切換時可將臨時邏輯數據寫入全局腳本中,切換完畢後再去全局腳本中取以前保存的數據,從而實現交互。(固然還有別的辦法也能實現這個效果,可是我以爲這樣作會更好一些,數據會更安全一些)函數

         接着咱們就進入場景中,遊戲場景是由若干遊戲對象組成,下面我好好說一說遊戲對象。遊戲對象是須要綁定遊戲腳本才能完成它的生命週期。那麼腳本的使命就會尤爲的重要。由於遊戲對象比較多那麼腳本必然會出現交互的狀況,以下圖所示,不少初期Unity3D的項目中的腳本會編寫成這個樣子。錯綜複雜相互交互,這樣編寫的腳本有可能你的遊戲能作出來,但是你在維護的時候團隊開發的時候你會發現你的腳本很是的混亂,別的同事想改都不知道怎麼改。(顯然這樣的做法時徹底錯誤的)動畫

         咱們想一想爲何腳本之間要交互,緣由很簡單。是由於腳本中須要使用/調用另外一條腳本或者另外一條腳本對應的遊戲對象某一項數據/方法,爲了解決這個問題而致使最終的腳本很是混亂。爲了不這個問題,我在開發中會這麼作,以下圖所示,腳本之間切記不要作直接的相互交互,腳本之間只作間接的交互。每個遊戲場景都有一個凌駕全部遊戲對象之上的單例腳本,在這條腳本中保存場景中全部腳本的公共數據。包括該場景的總體邏輯更新都是在這條單例腳本中完成。每條腳本都只與這個單例腳本作交互,和別的腳本一律不交互。(間接交互)架構設計

         編寫腳本時請注意,腳本只幹屬於本身最重要的事情,就跟代碼中的函數同樣,只幹最重要的事情。切記和該條腳本無關的事情不要去管,不要在腳本中作過多的相互連帶工做,讓全部連帶工做的話都放在全局單例腳本中來作。設計

  這裏咱們舉一個例子,主角砍怪或技能攻擊怪,怪物受傷只到怪死亡之後屏幕播放一段勝利動畫。對象

1.主角對象發動攻擊,全局單例腳本接受按鍵事件後通知主角腳本播放攻擊動畫。接口

2.敵人對象接受到主角發送攻擊消息時開始播放受傷動畫,敵人腳本接收到主角的碰撞時詢問單例腳本 主角是「普通攻擊、仍是技能攻擊」,接着敵人播放對應的受傷動畫,根據攻擊類型敵人對象開始減血。生命週期

3.重複上面的操做,當敵人的血量《=0的時。敵人銷燬自身對象,而且敵人腳本告訴單例腳本本身已經死亡。此時,單例腳本在調用「勝利動畫」對象播放勝利動畫效果。

上述邏輯我是徹底按照剛剛圖片中所說明的方式來寫,這樣作就能夠很好的避免交互交互混亂的狀況,其實開發中的全部相似這種交互的狀況都能很好的用這個全局單例腳原本解決。但願廣大Unity3D開發愛好者能夠和我討論,由於我知道架構設計沒有最好只有更好。嚯嚯!!

相關文章
相關標籤/搜索