【王楠的回答(37票)】:ios
爲何入門簡單,看一下官網的文檔和視頻教程就知道了,看完幾段視頻和例子就能讓初學者作出能玩的東西,其餘同類商業引擎都作不到。物體+組件的結構,所見即所得的編輯方式,都把初學者的門檻降到了最低。編程
再說說難精通的體現。其實任何能夠拿來作高大上酷炫屌遊戲的商業引擎都是難精通的,這個由引擎的功能深度和泛用性決定。一個集成了無數商業中間件的引擎,包括動畫系統、GUI、光照系統、尋路、物理等各個部分,任何一部分單獨拿出來都須要用戶用心掌握。從這個角度來講Unity和Unreal基本是差很少的。架構
那麼Unity特有的坑有哪些呢?app
1. 腳本執行順序:MonoBehavior是Unity組件系統的核心,離開這個類全部易上手和高效開發的特性都沒法施展。但多個組件腳本的執行順序控制始終是使人頭痛的問題。不瞭解這一點的用戶很容易陷入各類隱藏bug的泥沼。框架
2. 組件式功能結構給每一個人更大的控制權力,但沒法很好的區分團隊不一樣成員的責任。相比Unreal把編程分爲C++,UnrealScript和Kismet三層的作法,Unity讓每一個開發者都能看到腳本源碼並在須要時進行修改。對於獨狼開發者來講很是方便,但若是一個遊戲邏輯同時可能受到腳本程序、prefab參數配置和場景引用關聯三方制約,維護起來就很是的亂,出了問題也很難第一時間分清責任。編輯器
3. 內存分配和垃圾回收形成的效率問題初學者很難了解。Unity的一個重要特徵就是爲了讓整個引擎有更廣的受衆,故意隱藏了不少複雜的使用方法。好比說全自動的垃圾回收,就是爲了讓不懂內存分配的用戶也能無障礙使用。但很快進階一點的用戶就會發現大量運行時垃圾回收形成的拖慢,以致於成爲一個入門必經的陷阱。若是能在官方文檔裏告訴用戶哪些操做會分配內存,狀況會改善許多。ide
4. 功能迭代推新迅速,形成大量不成熟不完善的工做流程。這一點很難說是缺點,畢竟能第一時間用到酷炫的新功能對不少用戶來講是夢寐以求的,固然若是你是商業項目的技術負責人就要當心了。通常來講,官方推出的功能至少要在一年後穩定性和適用性纔會超過Asset Store上的同類第三方插件。工具
總的說來,因爲優秀的可擴展性,上述這些問題都不致命。總有人在製做優秀的工具來彌補這個引擎的各類不足。而配合其天下無敵的易用性,unity總體的技術方向是很是成功的。post
【鄧凱的回答(13票)】:性能
Unity入門易:
一、渲染對象上掛一個腳本組件就能夠驅動該對象的邏輯,基於MonoBehaviour的腳本一上來就把初始化(Awake、Start),更新(Update、FixedUpdate)的接口留好了,初學者徹底不用考慮程序框架一類的問題,直接填空就行。很像作早期flash遊戲的感受。
二、編輯器很是強大,所見即所得的編輯方式,能夠隨時暫停、單幀執行遊戲邏輯,提供場景和遊戲多個窗口實時調試,觀察效果。腳本組件面板上能夠實時看到全部變量的當前值,這對於調試遊戲邏輯很是方便。
三、3D引擎功能很完善,與咱們自研了5,6年的3D引擎相比,仍是遠遠甩咱們一大截,除了支持前向和後向的多種渲染管線,各類後渲染效果,還內置基於Beast的LightMap烘焙、基於Umbra的遮擋剔除這些商業中間件,要知道單採購這些中間件就得好幾十萬RMB,所以就算是個3D新手,要作個炫酷的3D效果也不是很難。雖然在渲染效果上可能比不上Unreal,Cry,可是U3D這玩意在中國,就算是免費的了,再說用U3D基本也是要發移動平臺,目前的3D效果已經很夠用。
四、遊戲其餘方面的組件也很豐富,有基於PhyX的物理系統,你要作點什麼瘋狂小鳥、割繩子之類的遊戲,真是很容易。另外還有基於NavMesh的導航系統、音樂音效系統(作音效的是FMOD的前開發者)等。
五、良好的開發者社區生態系統。Unity最NB的就是建了個Asset Store,全世界的UNITY開發者在這裏賣本身作的各類代碼、組件、美術資源,分享經驗。所以,學習成本大大下降。
六、一鍵發佈到各類平臺,包括IOS、Andriod、WP、網頁、Windows、Mac等,若是不是要接入其餘平臺相關的庫(如內購等),幾乎徹底不用學習平臺相關的編程知識(Object-C, Java等)
七、做爲證實Unity入門易的一個例子,本人在剛開始學Unity時,用了一個半月的業餘時間,作了個推幣小遊戲,放在AppStore上,一個月基本上能收個幾千塊錢。給個連接吧,不算廣告啊,只是說明下1個半月業餘時間用Unity能作個什麼樣的出來:iTunes 的 App Store 中的「小丑馬戲團」
--------------------------------------------------------------------------------------------------------------------------------
Unity精通難:
一、基於MonoBehaviour的腳本,用得太順手會有有很大的架構風險,你會不由自主的A組件引用B組件,B組件又引用A組件.....項目一大寫成一團亂麻。固然用其餘引擎,其餘語言也有這問題,但UNITY的一些特性必須用MonoBehaviour類來使用,因此要設計一個健壯的MVC架構須要頂住不少誘惑,繞一些彎。
二、基於MonoBehaviour的腳本,組件的初始化順序沒法明確,這個坑也有回答提到了。
三、底層代碼不開源,尤爲是Asset Store上賣的東西那幫開發者也習慣弄個dll封裝起來,所以,一些底層修改需求無法改,有時候很頭疼。
四、C#的GC問題,這個不能說是Unity的錯,C/C++的開發者會在長期的工做中變得對內存敏感,而C#開發者會弱得多,但遊戲恰巧又是個內存敏感的應用程序。所以,開發者須要對C#的內存分配時刻很是敏感,不然就會出現頻繁GC致使的頓卡現象。這裏尤爲要注意在每幀更新時的小內存分配。這方面要善用UNITY自帶的內存和性能分析工具。
五、Unity3D畢竟是個3D引擎,3D圖形學知識畢竟門檻很高,要深刻的作一個項目,須要對3D知識瞭解得很深,所以,在開發一些大型項目時,新手每每對於3D的各類需求和問題,若是Unity官方沒有,或者Asset Store裏找不到,就感到棘手。
六、最大的坑!IOS發佈時遇到跟AOT編譯有關的運行時異常。簡單說就是Unity採用mono對C#進行跨平臺編譯,但在iOS平臺中,Mono是以Full AOT模式運行的,沒法使用JIT引擎,因而引起了這個異常。因此常常出現的狀況是在PC和Andriod上游戲都跑得很好,但在iOS平臺會在運行時當掉!具體限制請參照:http://docs.xamarin.com/guides/ios/advanced_topics/limitations/#.NET.c2.a0API.c2.a0Limitations
七、做爲證實Unity精通難的例子,我司跨時代炫酷國際大做秒殺Appstore前20的Unity項目,作了大概8個月了吧,估計要出來還得小1年....
【知乎用戶的回答(2票)】:
入門易是由於它的編程腳本話(很是對象化),這個是核心。而後在這個核心以外,價格因素吸引了不少的開發者和公司。加上它的插件化技術造成了很好的生態環境,所以學習資料比其餘引擎多了不止不少兩個字就能說的清。這些都造成了入門的門檻很低。
精通難是由於3D自己,而不是unity這個工具。