游戏引擎 Unity 的入门易精通难体如今哪?为何?

 

 

【王楠的回答(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平台会在运行时当掉!具体限制请参照:

七、做为证实Unity精通难的例子,我司跨时代炫酷国际大做秒杀Appstore前20的Unity项目,作了大概8个月了吧,估计要出来还得小1年....

【知乎用户的回答(2票)】:

入门易是由于它的编程脚本话(很是对象化),这个是核心。而后在这个核心以外,价格因素吸引了不少的开发者和公司。加上它的插件化技术造成了很好的生态环境,所以学习资料比其余引擎多了不止不少两个字就能说的清。这些都造成了入门的门槛很低。

精通难是由于3D自己,而不是unity这个工具。

相关文章
相关标签/搜索