這篇文章主要想大家說明一下我在unity3d遊戲開發中是如何寫遊戲指令碼的,對於unity3d這套遊戲引擎來說入門極快,可是要想做好卻非常的難。這篇文章的目的是讓哪些已經上手unity3d遊戲引擎的朋友學會如何更好的寫遊戲指令碼,當然本文這緊緊是我這麼多年對遊戲開發的認知,你也可以有你自己的看法。首先我們看看遊戲主要是由哪幾部分組成的,如下圖所示,任何平台下的任何遊戲核心都是由:資料、邏輯、渲染三大部分組成。
當你寫過》=2個平台下的遊戲時你會發現其實遊戲開發很「容易」,為什麼「容易」呢?因為此時你會發現所有平台下開發遊戲的模式,如下圖中的「資料」與「邏輯」兩部分真的是完全一樣的,這兩部分是與遊戲開發平台無關的。然而真正與遊戲平台有關的緊緊是「渲染」這部分,因為各個遊戲平台下的渲染介面是不同的。這也就印證了一點,能把j2me遊戲寫好的程式設計師就必然能把ios或android遊戲同樣的寫好。讀到這裡請結合一下你的公司情況,你可能會發現在你的技術總監兩三天就能上手unity3d遊戲開發 cocos2d遊戲開發,這並不是他對遊戲平台研究的透徹,而是他對遊戲資料的掌控能力非常強,所以能很快玩轉各個平台下的開發。
如下圖所示,unity3d這套遊戲引擎在遊戲開發中的權重如圖中所示。其中包含100%的渲染部分 +50%左右的邏輯部分。(因為unity3d封裝了很多與邏輯相關的api供開發者使用)
下面我們回到unity3d指令碼架構的編寫上,我們知道unity3d在是可以建立遊戲場景的,在每個遊戲場景中又可以建立遊戲物件,把每個場景的遊戲物件融合在一起就是一款3d遊戲。遊戲場景之間屬於同等級的關係,為了讓遊戲場景之前互動我們需要有乙個凌駕所有場景之上的指令碼,我稱之為「全域性指令碼」。如下圖所示,所有場景都能與這個唯一的全域性指令碼進行互動。舉個例子,當場景切換時可將臨時邏輯資料寫入全域性指令碼中,切換完畢後再去全域性指令碼中取之前儲存的資料,從而實現互動。(當然還有別的辦法也能實現這個效果,但是我覺得這樣做會更好一些,資料會更安全一些)
接著我們就進入場景中,遊戲場景是由若干遊戲物件組成,下面我好好說一說遊戲物件。遊戲物件是需要繫結遊戲指令碼才能完成它的生命週期。那麼指令碼的使命就會尤其的重要。因為遊戲物件比較多那麼指令碼必然會出現互動的情況,如下圖所示,很多初期unity3d的專案中的指令碼會編寫成這個樣子。錯綜複雜相互互動,這樣編寫的指令碼有可能你的遊戲能做出來,可是你在維護的時候團隊開發的時候你會發現你的指令碼非常的混亂,別的同事想改都不知道怎麼改。(顯然這樣的作法時完全錯誤的)
我們想想為什麼指令碼之間要互動,原因很簡單。是因為指令碼中需要使用/呼叫另一條指令碼或者另一條指令碼對應的遊戲物件某一項資料/方法,為了解決這個問題而導致最終的指令碼非常混亂。為了避免這個問題,我在開發中會這麼做,如下圖所示,指令碼之間切記不要做直接的相互互動,指令碼之間只做間接的互動。每乙個遊戲場景都有乙個凌駕所有遊戲物件之上的單例指令碼,在這條指令碼中儲存場景中所有指令碼的公共資料。包括該場景的整體邏輯更新都是在這條單例指令碼中完成。每條指令碼都只與這個單例指令碼做互動,和別的指令碼一概不互動。(間接互動)
編寫指令碼時請注意,指令碼只幹屬於自己最重要的事情,就跟**中的函式一樣,只幹最重要的事情。切記和該條指令碼無關的事情不要去管,不要在指令碼中做過多的相互連帶工作,讓所有連帶工作的話都放在全域性單例指令碼中來做。
上述邏輯我是完全按照剛剛中所說明的方式來寫,這樣做就可以很好的避免互動互動混亂的情況,其實開發中的所有類似這種互動的情況都能很好的用這個全域性單例指令碼來解決。希望廣大unity3d開發愛好者可以和我討論,因為我知道架構設計沒有最好只有更好。嚯嚯!!
Unity3D之遊戲架構指令碼該如何來寫
這篇文章主要想大家說明一下我在unity3d遊戲開發中是如何寫遊戲指令碼的,對於unity3d這套遊戲引擎來說入門極快,可是要想做好卻非常的難。這篇文章的目的是讓哪些已經上手unity3d遊戲引擎的朋友學會如何更好的寫遊戲指令碼,當然本文這緊緊是我這麼多年對遊戲開發的認知,你也可以有你自己的看法。首...
Unity3D之遊戲架構指令碼該如何來寫
這篇文章主要想大家說明一下我在unity3d遊戲開發中是如何寫遊戲指令碼的,對於unity3d這套遊戲引擎來說入門極快,可是要想做好卻非常的難。這篇文章的目的是讓哪些已經上手unity3d遊戲引擎的朋友學會如何更好的寫遊戲指令碼,當然本文這緊緊是我這麼多年對遊戲開發的認知,你也可以有你自己的看法。首...
Unity3D之遊戲架構指令碼該如何來寫
這篇文章主要想大家說明一下我在unity3d遊戲開發中是如何寫遊戲指令碼的,對於unity3d這套遊戲引擎來說入門極快,可是要想做好卻非常的難。這篇文章的目的是讓哪些已經上手unity3d遊戲引擎的朋友學會如何更好的寫遊戲指令碼,當然本文這緊緊是我這麼多年對遊戲開發的認知,你也可以有你自己的看法。首...