Unity如何有效組織的代碼

來源:互聯網
上載者:User

標籤:style   class   http   color   com   get   

轉自知乎:梁偉國

準確地說,代碼作為Unity項目裡的一種資源,此問題應該擴充到如何組織Unity資源。簡單說說我們的經驗:
- Unity有一些自身的約定,譬如項目裡的Editor,Plugins等目錄作為編輯器,外掛程式目錄等等。知名的外掛程式會自己存放一個目錄,譬如NGUI等。
所以我們自己的代碼,一般目錄名會以底線開頭,譬如 "_Scripts", "_Prefabs"等。
對於情境,文檔等目錄,用兩條底線,以便他們能排在最頂部。
- 代碼用C#,別用JS。必要的話用namespace將自己的代碼括起來。我們是用namespace把自己積攢的公用庫包住。
- C#的注釋要認真寫,打///就能幫你補全了,沒理由偷懶。
- 每個程式檔案開頭要用一段注釋寫修改Log,誰改過什麼簡單留一條說明。就算用了Unity的版本管理或者Git,那些log終究會丟失,只有認真把log寫在代碼裡,才會有意識去認真最佳化它。
- Unity的指令碼邏輯,就功能而言大體分為兩種,一種是比較獨立的,譬如爆炸之後1秒鐘消失,這種單獨寫個指令碼綁定到目標上即可。
更多的是指令碼裡與其它的指令碼進行互動。Unity裡提供了一種萬金油的方法是SendMessage, 這種方法效能略差,如果你調用的頻率不高,隨便用也無妨。另一種方法是直接通過對象的執行個體去調用。

我們的做法是寫幾個公用的控制器,讓它們各司其職,負責各自的事情:
- 寫一個一個GlobalManager.cs來控制遊戲的全域變數及全域方法。靜態類模式。譬如當前玩到第幾大關第幾小關,玩家的金幣數量等。
- 寫一個GameController.cs來控制當前關的遊戲進程。單一實例模式。遊戲的主迴圈也是用它控制。初始化,勝利、失敗判定等等。
- 寫一個InputController.cs來控制所有的使用者輸入。單一實例模式。滑鼠、鍵盤、觸控螢幕,我們做遊戲是保證同時支援這三種輸入的,因為大部分時間是在PC上測試。
關於GameController與InputController的聯絡,有點讓人糾結。一般來講是在InputContoller裡調用GameController.Instance.Foo()執行方法。或者直接對Input寫成Listener的模式,讓GameController去監聽。
- 其它的類似菜單控制器,聲音控制器,成就控制器,IAP虛擬道具控制器等等,也是採用類似的方法管理。
- 關於PlayerPref的操作,統一寫成靜態類的get/set模式,程式中哪裡要用則直接讀寫。
- 如果你的項目裡情境的數量少(<5),那麼拖入情境的資源可以很隨意。如果情境數量很多(幾十個,有的解謎遊戲每個關卡就是一個情境),那麼拖入情境的prefab數量一定要少。
- 設計你的prefab資源裡,你要想像當其他人拿到這些資源,是否直接拖入一個空情境裡就能run,頂多再簡單設定幾下。如果你設計的資源不能做到這些,那麼得好好重新想想。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.