游戏引擎Unity的入门容易掌握却很难体现在哪里?为什么
为什么很容易上手?
观点一:
看看官网的文档和视频教程就知道了。新手看了几个视频和例子,可以做出一些可以玩的东西,其他同类商业引擎做不到的。对象+组件的结构,所见即所得的编辑方式,把初学者的门槛降到了最低。
观点二:
1.在渲染对象上挂一个脚本组件可以驱动对象的逻辑。基于MonoBehaviour的脚本一上来就剩下初始化(Awake,Start)和更新(FixedUpdate)的接口了。初学者完全不用考虑程序框架之类的问题,直接填空即可。很像早期玩flash游戏的感觉。
2.编辑器非常强大,所见即所得的编辑模式可以随时暂停,单帧执行游戏逻辑,提供场景和游戏的多窗口实时调试,观察效果。在脚本组件面板上可以实时看到所有变量的当前值,非常方便调试游戏逻辑。
3.3D引擎具有完善的功能。相比我们研究了5、6年的3D引擎,还是远远落后于我们。除了支持各种前后向渲染管道和各种后期渲染效果,还内置了基于Beast的光照贴图烘焙、基于Umbra的遮挡去除等商业中间件。要知道,光是购买这些中间件就要几十万人民币,所以对于一个3D新手来说,做出酷炫的3D效果并不难。虽然渲染效果可能不如虚幻和哭泣,但是U3D在国内是免费的。况且用U3D基本上是移动平台,目前的3D效果已经足够了。
4.游戏的其他组件也非常丰富。有一个基于PhyX的物理系统。对你来说,做一些疯狂的鸟和割绳之类的游戏真的很容易。此外,还有基于NavMesh的导航系统、音乐音响系统(FMOD的前开发者制作音效)等等。
5.良好的开发者社区生态系统。Unity最大的好处就是建立了一个资产商店,全世界的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.底层代码不开源,尤其是资产商店上卖的东西。开发人员也习惯于用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运行在全AOT模式,所以不能使用JIT引擎,导致了这个异常。所以经常会出现游戏在PC和Andriod上运行良好,但在iOS平台运行时就会被典当的情况!请参考/guides/IOs/advanced _ topics/limits/#。net . C2 . A0 API . C2 . A0具体限制的限制。
7.作为证明Unity熟练程度的例子,我们公司做Unity项目杀进Appstore前20大概8个月,估计要1年才能出来。....
观点二:
事实上,任何可以用来制作高大上的酷炫游戏的商业引擎都是很难掌握的,这是由引擎的功能深度和通用性决定的。一个集成了无数业务中间件的引擎,包括动画系统、GUI、灯光系统、寻路、物理等部分,任何一部分都需要用户掌握。从这个角度来说,统一和不真实基本是一样的。
那么Unity有哪些独特的坑呢?
1.脚本执行顺序:MonoBehavior是Unity组件系统的核心,所有易于使用和高效开发的功能没有这个类是无法显示的。然而,控制多个组件脚本的执行顺序一直是一个令人头疼的问题。不了解这一点的用户很容易陷入隐藏bug的泥潭。
2.组件式职能结构给了每个人更多的控制权,但是不能很好的区分团队不同成员的职责。相对于Unreal将编程分为C++、UnrealScript、Kismet的做法,Unity让每一个开发者都能看到脚本源代码,并在必要时进行修改。对于独狼开发者来说非常方便,但是如果一个游戏逻辑可能同时受到脚本程序、预置参数配置、场景参考关联的限制,那么维护起来就会非常混乱,出了问题也很难在第一时间分清责任。
3.内存分配和垃圾回收带来的效率问题,初学者很难理解。Unity的一个重要特点就是为了让整个引擎拥有更广泛的受众,故意隐藏了很多复杂的使用方法。比如自动垃圾回收就是为了让不懂内存分配的用户也可以使用。但是稍微高级一点的用户很快就会发现,大量的运行时垃圾收集会拖慢速度,成为入门的必要陷阱。如果你能在官方文档中告诉用户哪些操作会分配内存,情况会改善很多。
4.功能迭代很快,导致很多不成熟不完善的工作流。这几乎不是一个缺点。毕竟很多用户在第一时间使用酷炫的新功能是受欢迎的。当然,如果你是商业项目的技术总监,你就要小心了。一般来说,正式推出的功能要比资产商店上的同类第三方插件更加稳定和适用,至少还需要一年的时间。
一般来说,由于出色的可扩展性,这些问题并不是致命的。总有人在制造优秀的工具来弥补这个引擎的不足。而且凭借其无敌的可用性,unity的整体技术方向是非常成功的。