同樣是用 C# 做遊戲,為什麼 XNA 非常失敗,Unity 卻成功了?


unity跟xna完全就不是一個東西,如何比較。

unity提供了完整的界面,托托拽拽輕鬆擼個小遊戲,又趕上了移動浪潮,而且還免費。

xna就是個代碼框架,其他什麼都不管。

門檻越低,越傻瓜化的工具,在鋪量的階段才有絕對優勢。

C#根本不是重點。


Unity 的成功始於手游(iOS及Android)。

XNA 支持 Windows、Xbox 360(僅能發布給每年付99美金的會員)及——Windows Phone ??


XNA只提供了API連引擎都算不上,而unity3D提供了完整開發環境;XNA只支持微軟自家的平台,而Unity3D支持的平台要多的多。所以2者根本不能相提並論。


同樣是用中文寫小說,為什麼《三體》成功了, @流浪的蛤蟆 卻爛尾了?


與其用XNA去對比Unity,不如用XNA襯托一下Unity看看,Unity為何如此成功吧。

1,XNA大多時候是用來開發XBOX遊戲的(當然這應該是我知識面太狹窄導致的偏見),但是Unity主要用來開發手游,而國內你可以找到幾千家手游開發公司,但找不出100家xbox遊戲開發公司,所以Unity在戰場選擇方面顯然是非常成功的。

2,Unity允許用戶寫Shader,而在遊戲行業混的客戶端程序員大都有一個喜歡渲染的心,為什麼喜歡渲染呢?因為渲染的事情功勞最清晰,你做了一丁點就可以拿出來裝逼,結合滑坡謬誤,又產生了另一個錯誤的觀點——至於遊戲玩法內容和業務么,隨便來個應屆畢業生就能寫。XNA大多就是寫寫遊戲玩法的,也就是這樣的人認為的「應屆畢業生用的東西」,所以看起來就很low。但事實是什麼?99%掛掉的項目,都掛在遊戲的內容玩法寫的不行,導致甚至後期策劃數據錄入簡直就不是地球人乾的事情,或者各種湊效果湊出來的bug,每天這些渲染bug員(不好意思,這樣的傢伙不配稱作程序員)都能寫出新的bug來修復老的bug,因為他們壓根不懂也不在乎更不願意去理解遊戲的業務寫法——什麼AI,什麼技能框架,什麼系統玩法,不就是if else么?應屆畢業生都能寫,我們要寫的是shader!可惜,掛掉的遊戲100%在渲染方面都不是不咋的,而是很渣渣。

3,Unity有個「編輯器」,我的天,這太合外行的意了,甚至egret、cocos什麼都紛紛效仿。很多初級遊戲程序員甚至認為做遊戲和做軟體一樣,拖拖控制項寫點if else就能搞定(當然最大的區別還是shader,寫shader多牛逼),想來也不奇怪,當年風靡一時的delphi不就是拖拖控制項,寫個邏輯么。更何況程序界的願景正是——代碼不值錢,值錢的是思想。自然地,有個圖形化可視編輯器,就變得非常非常重要了,哪怕用這個做不了大遊戲沒關係。

4,Unity有神一樣的針對性(非貶義,從一個策劃角度來看,他的商業手法是對的)。先說unity不適合做大遊戲,但是他做個小遊戲,做個demo什麼的,絕對是佔優勢的,因為什麼?這種量級的遊戲,就算你的效果都是湊得,也不會有問題,it just work,不需要考慮商業化以後太多的維護帶來的業務變化,所以Unity主攻如何做好小遊戲和demo戰略方向沒錯,因為很多團隊本身也就是只要做一個小遊戲或者demo,去忽悠點錢來快活快活而已。Unity的針對性還不僅限於此,你想想unity的邏輯框架是什麼模式的?ECS的,但是寫法呢,至少到了今天幾乎就是OOP的。OOP思想的ECS,呵呵,多麼神奇,為什麼會這樣呢?這一批所謂程序員,都是學著OOP長大的,所以思想就是OOP的,ECS的抽象方式他們接受不了,如果你非要ECS寫法,那就是自找不痛快了。而現在還抱著OOP不放的人,也正是那種覺得——寫遊戲的水平就是看shader,核心業務邏輯沒什麼技術含量,甚至認為橫版動作遊戲用物理引擎可以輕鬆搞定的人。這種用戶的針對性,簡直就是商業產品的一種典範水平。

5,Unity真正可取之處也是他的渲染,也包括他的ECS思想,可是這些東西最大的價值在於被借鑒,而不再是本身使用unity了。所以Unity要做一個看起來複雜的集成環境沒什麼毛病,想想為什麼你見過的H5團隊會選擇egret而不是(甚至不知道)phaser?因為phaser看起來「就是一套api而已」,直白的說,就是逼格不夠,看起來就不像開發遊戲的,開發遊戲的應該怎麼樣?至少外行看來,應該和當年的delphi一樣,拖拖控制項,寫寫邏輯,按一下三角箭頭按鈕就能運行,然後重要的區別是多一個寫shader(看似底層編寫代碼)的環境。如果你要用一句中性詞來描述這個現象,那應該叫——unity的產品完整度比較高,呵呵。

6,Unity在湊效果和方便湊效果的方面,可謂一絕。什麼叫湊效果?就是策劃設計了一個遊戲,你去做的看起來就那樣,但是背後完全不是遊戲的邏輯——it just work。視覺依賴於邏輯,是遊戲開發,反之就是典型的湊效果。就比如你要做一個放置遊戲,地圖完全依賴於美術做好的,角色依賴於物理和一些亂七八糟的東西在美術做好的地圖上跑,而不是邏輯層在運行,視覺層將運行結果顯示出來。

所以,如此好的產品思路,配合犀利的市場營銷(這塊我就不分析了,如果你都看不明白王者榮耀和陰陽師背後的營銷策略,那也就沒得說了),Unity怎麼就能火不起來呢?


個人覺得 主要還是XNA自身 不夠完整(字體的支持) 好用(沒有類似U3D那種強大的集成環境 操作體驗也很爛)。

除了.net 還需要安裝 XNA runtime)

總之XNA和u3d 比 差遠了。

做好點的話WP也不至於今天這種瀕死的狀況。


用破逼mono能成功unity完美詮釋了在對的時間點對的平台上對的項目...技術牛逼都是扯淡,只要沒啥大問題,先佔著坑再說...「你提的這個issue我們會在下一個大版本解決,噢,對,就是unity2017」.....


典型的小弟幹活,功勞都讓領導佔了.沒錯,C#就是領導,只會發號施令(邏輯),小弟(C++)幹活.

先擺事實:

XNA=Manager DirectX + library(C#)

Unity=OpenGL/ES/DirectX + framework/engine(C/C++) + interface script drive(Mono C#)

後講結果:

1.因為Unity從易用性到功能/特性和XNA根本不是一次層次的.

2.因為XNA依託Manager DirectX,基本都是C#驅動渲染和邏輯,所以是真正的C#做遊戲.所以失敗了.可以看出C#不適合干驅動顯卡的事.當然也有商業等各種因素原因.

3.C#易學,好用,快速上手,群眾基礎廣.依託Mono還能跨平台.所以用來驅動Unity的遊戲邏輯.但真正呈現五光十色,絢爛的畫面的是C++,他才是真正幹活的哪個.Unity聰明的把合適的語言用在了最合適的地方.

Unity拯救了C#,C#也能寫這麼牛逼的3D遊戲,誰說C#不能寫遊戲?王者農藥呼你一臉.看見C#er得意的神情,我想Unity真是太棒了.


XNA只是API,Unity是一個完整的引擎。你可以把Unity比作FLash或者3ds Max


unity提供了幾乎是市場上能找到的最完善的工具鏈,XNA提供了什麼?不過就是用C#替換了C++而已。

對於低成本遊戲開發最需要的就是工具鏈,微軟沒搞懂這個,只是希望通過XNA把遊戲開發者引導到自己的生態環境里。


這裡回答問題的大部分人都不知道XNA已被微軟開源並被一群開發者移值為跨平台的Monogame。在Github上有幾千star。何況XNA並不矢敗,之前玩過幾個XNA遊戲,比較有名的如魔能,骨頭將軍等。體驗還是可以的。


XNA更像是開發引擎用的底層框架,Unity是完整的引擎,兩者是不同類型不同功能的東西,不具備可比性。


感覺語言不能說明問題,項目成功與否的關鍵是「人」,不是「語言」「框架」「硬體」之類的東西


推薦閱讀:

請問untiy開發遊戲使用什麼架構比較合適?
Unity開發大部分都會用到插件嗎?有沒有公司直接全部用Unity原生API來開發?
是什麼沒能讓你成為一名獨立遊戲開發者?
本人想轉做U3D 如何學習U3D?
unity寫的功能模塊如何集成到iOS原生的代碼裡邊?

TAG:Unity遊戲引擎 | C# |