2012年12月7日 星期五

解析Wagon Shootout (一): Unity如何清楚化分工作



<問題描述>
在 Unity 裡頭,最令人詬病的就是場景與場景間要怎麼化分工作,才不會讓兩位以上的程序去改到彼此不該改的地方。

其實問題出在場景檔與場景檔是以 binary 的方式儲存。再版本控管上無法直接合併。當然如果你買的是 Pro 的版本,是有設定可以調成文字方式儲存。但文字的缺點就是“檔案肥”、“開啓速度龜”,而且版本控管時的“合併”動作,其實根本看不懂它合併什麼,所以也無從檢查。


這方面 Unity 也不是沒有解法...,就是買它的 Asset Server

但對於小團隊來說,真的不太可能!因為光 iOS 整套發佈就得花上 NT 80K,若加上 Asset Server 豈不“尚未開團,先倒閉?”

Assert Server 畫面

其實可以利用一些 Design Pattern 來解決這方面的問題。

Wagon Shootout 開發過程裡,兩位程序的分工是,一位負責 Lobby、一位負責 Game Play。兩邊需要做資料交換,例如:商城幣、分數資料、成就累積,外加一些提示 UI 的共用...等等。

但其中一位程序又是兼職,無法與另一位在同一時間工作,所以想辦法切割乾淨成了必要的工作,不然在專案後期結果不堪設想!!

這時候“中央集權”這四個字,浮現腦海了!!

在Unity裡,因為沒有所謂的 Main function,所以常常在看些別人的案子時,會有一種“無頭蒼蠅”的感覺。

這時候“Main Object”的想法出現了!!

兩者合而為一,就是解法拉!

<解法>
首先,建立一個名為 Main 的 Monobehaviour 的物件,並於Awake() 裡頭使用 Object.DontDestroyOnLoad( this ),令此物件在場景間的切換不會被自動刪除。

再來,令此物件為Singleton,public static Main instance;。


接著,創建一個名為 Main 的場景檔,裡頭擺入 Main 的實體物件。

再來就容易拉!遊戲的啓動都由這個 Main.unity 開始。場景間的彼此切換的 API 也放這裡,所有相關的外掛,如:Facebook、IAP、Flurry,通通塞在這個 Object 底下。還有彼此間的交換資料,如:遊戲幣、成就資料、遊戲進度...等等。

由於 Main 是一個 Global 的 Singleton。只要切換場景時把所須的交換資料儲存。這樣兩位程序間就可以回到,“只須互相瞭解Class的設計,而不會強迫彼此修改對方的場景”。這不就回到跟以前以 C++ 開發遊戲的樣子了嗎?

希望這篇文章對大家有用處。 ^__^a


<感言>
為大家服務到今天滿一年了,大家可能知道小編一直在分享Unity 的相關技術文章與資料,但一直有讀者來信問說,作品是哪一款遊戲,當時確實很難回答。現在總算能跟大家說,就是:“Wagon Shootout”。

截至為止(2012.12.7),遊戲在台灣區的排行:
  1. 不分類排行 3
  2. 不分類遊戲排行 1
  3. 遊戲冒險分類 1
  4. 遊戲文字分類 1
謝謝目前大家的支持與愛護,目前遊戲正“限時特價 NT30”,如果還沒下的朋友希望能支持,已經下的朋友若對遊戲有什麼建議也可以留在這裡,小編我會在第一時間聆聽您的建議與您討論。

App Store URL: http://bit.ly/VuCGqx

接下來,小編會一步步公佈 Wagon Shootout 的製成與大家分享,想知道的讀者千萬別錯過噢!



小編碎碎念:
如果你覺得這篇文章對你有所幫助,請給我們一個“贊”吧!

UnityIN 總編輯:Bric Lin,
Email: ericlin09@gmail.com
曾任職台灣某遊戲公司研發Game Engine,為書籍“OGRE入門指南”譯者,專攻Rendering技術與遊戲開發,目前為獨立團隊CocosPlay主程式

沒有留言:

張貼留言