U3D 游戲引擎之游戲架構腳本該如何來寫


這篇文章MOMO主要想大家說明一下我在Unity3D游戲開發中是如何寫游戲腳本的,對於Unity3D這套游戲引擎來說入門極快,可是要想做好卻非常的難。這篇文章的目的是讓哪些已經上手Unity3D游戲引擎的朋友學會如何更好的寫游戲腳本,當然本文這緊緊是我這么多年對游戲開發的認知,你也可以有你自己的看法。首先我們看看游戲主要是由哪幾部分組成的,如下圖所示,任何平台下的任何游戲核心都是由:數據、邏輯、渲染三大部分組成。

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

如下圖所示,Unity3D這套游戲引擎在游戲開發中的權重如圖中所示。其中包含100%的渲染部分 +50%左右的邏輯部分。(因為Unity3D封裝了很多與邏輯相關的API供開發者使用)

下面我們回到Unity3D腳本架構的編寫上,我們知道Unity3D在是可以創建游戲場景的,在每個游戲場景中又可以創建游戲對象,把每個場景的游戲對象融合在一起就是一款3D游戲。游戲場景之間屬於同等級的關系,為了讓游戲場景之前交互我們需要有一個凌駕所有場景之上的腳本,我稱之為“全局腳本”。如下圖所示,所有場景都能與這個唯一的全局腳本進行交互。舉個例子,當場景切換時可將臨時邏輯數據寫入全局腳本中,切換完畢后再去全局腳本中取之前保存的數據,從而實現交互。(當然還有別的辦法也能實現這個效果,但是我覺得這樣做會更好一些,數據會更安全一些)

接着我們就進入場景中,游戲場景是由若干游戲對象組成,下面我好好說一說游戲對象。游戲對象是需要綁定游戲腳本才能完成它的生命周期。那么腳本的使命就會尤其的重要。因為游戲對象比較多那么腳本必然會出現交互的情況,如下圖所示,很多初期Unity3D的項目中的腳本會編寫成這個樣子。錯綜復雜相互交互,這樣編寫的腳本有可能你的游戲能做出來,可是你在維護的時候團隊開發的時候你會發現你的腳本非常的混亂,別的同事想改都不知道怎么改。(顯然這樣的作法時完全錯誤的)

我們想想為什么腳本之間要交互,原因很簡單。是因為腳本中需要使用/調用另一條腳本或者另一條腳本對應的游戲對象某一項數據/方法,為了解決這個問題而導致最終的腳本非常混亂。為了避免這個問題,我在開發中會這么做,如下圖所示,腳本之間切記不要做直接的相互交互,腳本之間只做間接的交互。每一個游戲場景都有一個凌駕所有游戲對象之上的單例腳本,在這條腳本中保存場景中所有腳本的公共數據。包括該場景的整體邏輯更新都是在這條單例腳本中完成。每條腳本都只與這個單例腳本做交互,和別的腳本一概不交互。(間接交互)

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

  這里我們舉一個例子,主角砍怪或技能攻擊怪,怪物受傷只到怪死亡以后屏幕播放一段勝利動畫。

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

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

3.重復上面的操作,當敵人的血量《=0的時。敵人銷毀自身對象,並且敵人腳本告訴單例腳本自己已經死亡。此時,單例腳本在調用“勝利動畫”對象播放勝利動畫效果。

上述邏輯我是完全按照剛剛圖片中所說明的方式來寫,這樣做就可以很好的避免交互交互混亂的情況,其實開發中的所有類似這種交互的情況都能很好的用這個全局單例腳本來解決。希望廣大Unity3D開發愛好者可以和我討論,因為我知道架構設計沒有最好只有更好。嚯嚯!!

 

http://tech.ddvip.com/2013-02/1359996528190113.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM