Unity 的 2D 功能與 Cocos2d-x 相比有哪些優勢和劣勢?


自問自答,最近在用Cocos2d-x做了一個2D遊戲--【深入Cocos2d-x】使用MVC架構搭建遊戲Four之後,又用Unity的2D功能做了一個 MrNerverDie/Unity-Flappy-Bird · GitHub ,總結了兩個引擎的優缺點,我主要是從Unity的角度進行總結的,各位同學可以參考下:

Unity的優勢:

  1. 良好的編輯器支持,包括Animator動畫狀態機,Animation動畫編輯器,粒子編輯器等等。
  2. Unity可以使用C#編程,省去了內存管理的麻煩,還可以通過協程來處理遊戲中的非同步事件等等,C#的很多庫也是很方便(PureMVC,LitJSON)
  3. Unity有內置的Profiler,可以直觀地對性能進行調優。

Unity的劣勢

  1. 對GameObject之間的通訊的支持做的不好,關於這一點,我寫了一篇博客來講這個問題:【Unity3D技巧】在Unity中使用事件/委託機制(event/delegate)進行GameObject之間的通信 (二) : 引入中間層NotificationCenter
  2. 對NameSpace支持的不好,到4.x的時候NameSpace還是不能正常使用
  3. 對文件讀寫沒有內置的支持, 對JSON和XML數據的讀寫 沒有內置的支持。
  4. 在2D方面的許多特性還是在開發中,功能比較弱。比如Sprite Packer,骨骼動畫等。
  5. 由於Unity入門比較容易,導致大量美工和策劃也能使用Unity,致使網上的代碼資源良莠不齊,很多博客和文章連最基本的代碼高亮都沒有(比如說Unity3D貼吧和遊戲蠻牛論壇)。相比之下,Cocos2d-x網上的學習資源比較適合程序員

想到什麼就寫什麼就不管什麼優勢、劣勢的分了,自行提取吧

1、

使用Cocos2d-x,團隊需要自己寫編輯工具,用來供內容產生者(策劃或者其他人員)編輯關卡或者是頁面。所以,整個工具完全需要根據要做的項目,進行一段時間的開發。細節上大致是:需要自己設計關卡的結構,自己寫關卡的load代碼,會需要根據策劃的使用反饋調節工具的界面,快捷鍵等等,最後,產生bug的時候有時候發現可能是工具引起的。

對於遊戲部分來說,也得根據項目需要,集成很多的第三方工具,如box2d(物理)、fmod(聲音)。這些部分,對新團隊來說,導入也是一定的成本(小一點而已)。

所以,用Cocos2d-x,如果團隊不是有一定的沉澱,那麼,會在周邊的支持性工作上費掉不少力氣。就在一定時間內不能「專註在內容的開發上」。

Cocos2d-x的這塊軟肋,反過來就是Unity3d的硬功夫。

2、

使用Unity3d,因為它本身是個通用引擎,沒有什麼定製化的地方。所以,產生的包的大小在mobile上是個硬傷。除了這個我會介意的地方之外,其他可能都是我比較喜歡的地方了,物理、場景、聲音、腳本應有盡有,雖然相對於Cocos2d-x,它沒有源代碼可看,但是,如果有一個方法讓我不看源代碼就解決問題,我一定更喜歡這個不看源代碼的方式。這塊Unity3d還真有,它的文檔、資料、社區在我使用中,基本能解決80%的問題。

有人硬要以開源來說的話,我想的是,龐大如unity3d,真的出現問題,在茫茫代碼中試圖找到相關的地方,插入自己的代碼實現部分,可能本身就不易。不像Cocos2d-x,代碼量其實很小,很容易看完,所以容易改動。所以,大多數內容開發者,開始的時候不必要太介意這個事情。


優勢:
1、自帶動畫編輯器
2、可以使用C#
3、可視化編程和調試方面很方便
4、部分邏輯代碼可以直接復用在unity3d項目中
5、強大的unity asset 商店
6、強大的社區,遇到問題很容易在google查到
7、相對C++, C#和js相對簡單一點

劣勢:
1、代碼不開源,遇到問題很抓狂,只能看文檔,或求助社區
2、由於C#,js 都是自動gc,程序員可能會不注意內存優化
3、cocos自己的骨骼動畫這方面一直三心二意,dragon bones 支持的不行,ccs莫名崩潰,這次升級到3.0,完全不支持之前引擎升級到3.0

總結:
其實兩款各有優劣,看自己團隊情況,說實話每個項目都有自己不同的特點。


現有條件下cocos2d的編輯器讓很多項目團隊望而生畏啊。


用Unity,你只需要關注怎麼使用Unity就行了。

用cocos,你不但要關注怎麼去製作遊戲,還要解決cocos的bug,還要想辦法在有限的編輯器功能下實現策劃所需要的功能,或者想想怎麼去製作滿足策劃需求的編輯器,還要想辦法怎麼去把遊戲代碼和自己已經修改過的底層功能移植到最新的cocos版本中。


基本上現在的優勢只在編輯器比較完善了。相對於C#或者js,cocos2dx也可以用腳本,所以不能說有優勢。但是你看看cocos那底層的代碼,你真的很難對它有信心,至於unity,眼不見為凈。


推薦閱讀:

如何評價豆瓣推出的新 App「豆瓣」?
登入界面中,「登錄」和「登陸」哪個正確?
哪款免費手機 App 好用到讓你覺得付費都不足以表達感謝之情?
為什麼現在有會照相的手機而沒有可以通話的相機?
外行人如何在一個月時間內成為可以開發 App. 的獨立製作人?

TAG:移動應用 | 遊戲開發 | Unity遊戲引擎 | 移動開發 | Cocos2d-x |