當前位置:編程學習大全網 - 源碼下載 - 遊戲引擎 Unity 的入門易精通難體現在哪?為什麽

遊戲引擎 Unity 的入門易精通難體現在哪?為什麽

9秒學院提供答案:

為什麽入門簡單?

觀點壹:

看壹下官網的文檔和視頻教程就知道了,看完幾段視頻和例子就能讓初學者做出能玩的東西,其他同類商業引擎都做不到。物體+組件的結構,所見即所得的編輯方式,都把初學者的門檻降到了最低。

觀點二:

1、渲染對象上掛壹個腳本組件就可以驅動該對象的邏輯,基於MonoBehaviour的腳本壹上來就把初始化(Awake、Start),更新(Update、FixedUpdate)的接口留好了,初學者完全不用考慮程序框架壹類的問題,直接填空就行。很像做早期flash遊戲的感覺。

2、編輯器非常強大,所見即所得的編輯方式,可以隨時暫停、單幀執行遊戲邏輯,提供場景和遊戲多個窗口實時調試,觀察效果。腳本組件面板上可以實時看到所有變量的當前值,這對於調試遊戲邏輯非常方便。

3、3D引擎功能很完善,與我們自研了5,6年的3D引擎相比,還是遠遠甩我們壹大截,除了支持前向和後向的多種渲染管線,各種後渲染效果,還內置基於Beast的LightMap烘焙、基於Umbra的遮擋剔除這些商業中間件,要知道單采購這些中間件就得好幾十萬RMB,因此就算是個3D新手,要做個炫酷的3D效果也不是很難。雖然在渲染效果上可能比不上Unreal,Cry,但是U3D這玩意在中國,就算是免費的了,再說用U3D基本也是要發移動平臺,目前的3D效果已經很夠用。

4、遊戲其他方面的組件也很豐富,有基於PhyX的物理系統,妳要做點什麽瘋狂小鳥、割繩子之類的遊戲,真是很容易。另外還有基於NavMesh的導航系統、音樂音效系統(做音效的是FMOD的前開發者)等。

5、良好的開發者社區生態系統。Unity最NB的就是建了個Asset Store,全世界的UNITY開發者在這裏賣自己做的各種代碼、組件、美術資源,分享經驗。因此,學習成本大大降低。

6、壹鍵發布到各種平臺,包括IOS、Andriod、WP、網頁、Windows、Mac等,如果不是要接入其他平臺相關的庫(如內購等),幾乎完全不用學習平臺相關的編程知識(Object-C, Java等)

7、作為證明Unity入門易的壹個例子,本人在剛開始學Unity時,用了壹個半月的業余時間,做了個推幣小遊戲,放在Appstore上,壹個月基本上能收個幾千塊錢。給個鏈接吧,不算廣告啊,只是說明下1個半月業余時間用Unity能做個什麽樣的出來:iTunes 的 App Store 中的“小醜馬戲團”

為什麽Unity精通難?

觀點壹:

1、基於MonoBehaviour的腳本,用得太順手會有有很大的架構風險,妳會情不自禁的A組件引用B組件,B組件又引用A組件.....項目壹大寫成壹團亂麻。當然用其他引擎,其他語言也有這問題,但UNITY的壹些特性必須用MonoBehaviour類來使用,所以要設計壹個健壯的MVC架構需要頂住很多誘惑,繞壹些彎。

2、基於MonoBehaviour的腳本,組件的初始化順序無法明確,這個坑也有回答提到了。

3、底層代碼不開源,尤其是Asset Store上賣的東西那幫開發者也習慣弄個dll封裝起來,因此,壹些底層修改需求沒法改,有時候很頭疼。

4、C#的GC問題,這個不能說是Unity的錯,C/C++的開發者會在長期的工作中變得對內存敏感,而C#開發者會弱得多,但遊戲恰巧又是個內存敏感的應用程序。因此,開發者需要對C#的內存分配時刻非常敏感,否則就會出現頻繁GC導致的頓卡現象。這裏尤其要註意在每幀更新時的小內存分配。這方面要善用UNITY自帶的內存和性能分析工具。

5、unity3d畢竟是個3D引擎,3D圖形學知識畢竟門檻很高,要深入的做壹個項目,需要對3D知識了解得很深,因此,在開發壹些大型項目時,新手往往對於3D的各種需求和問題,如果Unity官方沒有,或者Asset Store裏找不到,就感到棘手。

6、最大的坑!IOS發布時遇到跟AOT編譯有關的運行時異常。簡單說就是Unity采用mono對C#進行跨平臺編譯,但在iOS平臺中,Mono是以Full AOT模式運行的,無法使用JIT引擎,於是引發了這個異常。所以經常出現的情況是在PC和Andriod上遊戲都跑得很好,但在iOS平臺會在運行時當掉!具體限制請參照:/guides/ios/advanced_topics/limitations/#.NET.c2.a0API.c2.a0Limitations

7、作為證明Unity精通難的例子,我司跨時代炫酷國際大作秒殺Appstore前20的Unity項目,做了大概8個月了吧,估計要出來還得小1年....

觀點二:

其實任何可以拿來做高大上酷炫屌遊戲的商業引擎都是難精通的,這個由引擎的功能深度和泛用性決定。壹個集成了無數商業中間件的引擎,包括動畫系統、GUI、光照系統、尋路、物理等各個部分,任何壹部分單獨拿出來都需要用戶用心掌握。從這個角度來說Unity和Unreal基本是差不多的。

那麽Unity特有的坑有哪些呢?

1. 腳本執行順序:MonoBehavior是Unity組件系統的核心,離開這個類所有易上手和高效開發的特性都無法施展。但多個組件腳本的執行順序控制始終是令人頭痛的問題。不了解這壹點的用戶很容易陷入各種隱藏bug的泥沼。

2. 組件式功能結構給每個人更大的控制權力,但無法很好的區分團隊不同成員的責任。相比Unreal把編程分為C++,UnrealScript和Kismet三層的做法,Unity讓每個開發者都能看到腳本源碼並在需要時進行修改。對於獨狼開發者來說非常方便,但如果壹個遊戲邏輯同時可能受到腳本程序、prefab參數配置和場景引用關聯三方制約,維護起來就非常的亂,出了問題也很難第壹時間分清責任。

3. 內存分配和垃圾回收造成的效率問題初學者很難了解。Unity的壹個重要特征就是為了讓整個引擎有更廣的受眾,故意隱藏了很多復雜的使用方法。比如說全自動的垃圾回收,就是為了讓不懂內存分配的用戶也能無障礙使用。但很快進階壹點的用戶就會發現大量運行時垃圾回收造成的拖慢,以至於成為壹個入門必經的陷阱。如果能在官方文檔裏告訴用戶哪些操作會分配內存,情況會改善許多。

4. 功能叠代推新迅速,造成大量不成熟不完善的工作流程。這壹點很難說是缺點,畢竟能第壹時間用到酷炫的新功能對很多用戶來說是求之不得的,當然如果妳是商業項目的技術負責人就要小心了。壹般來說,官方推出的功能至少要在壹年後穩定性和適用性才會超過Asset Store上的同類第三方插件。

總的說來,由於優秀的可擴展性,上述這些問題都不致命。總有人在制作優秀的工具來彌補這個引擎的各種不足。而配合其天下無敵的易用性,unity整體的技術方向是非常成功的

  • 上一篇:Skdj偏離源代碼
  • 下一篇:這些都是什麽程序?
  • copyright 2024編程學習大全網