unreal和unity引擎比较与选择
本文写于2022年06月01日,阅读时请注意时效。
本文主要针对初学者选择游戏引擎时遇到的困惑,摘录了一些其他人的观点,并给出了我自己的考虑和选择以供参考。
参考链接
主要来自于两个知乎问题:
两个问题的回答都只有10+,其中有效回答就更少了。其中第一个问题比较早,有效回答都在2018以前;第二个问题比较新, 最早的回答是2022年的。
有效信息摘录
作者:爱撸大猫的工具人
时间:2022-02-26
重点:做demo、定制渲染管线、材质链、代码调试
这个问题要分三个阶段的团队讨论比较合理。 首先我觉得这2个都是非常优秀的游戏引擎。但是它们确实对不同阶段的开发者有不同的要求。 对于完全没有游戏开发经验和没有编程经验的美术和策划。虚幻是比较容易做出demo,但是也仅仅是demo,大型上线项目还是用c++开发性能有要求的模块然后用少量蓝图配置灵活配置的模块。虚幻的工具链比较完整可以给不会编程的美术和策划提供比较方便的原型设计环境。 对于第二个阶段就是有一定游戏编程能力但是对大型软件工程驾驭能力不算太强的团队,unity要容易上手很多。因为它相对而言功能比较清晰不存在太多的使用的潜规则。你可以在一个比较纯粹的干净的环境添加你的gameplay逻辑。对于美术同学和TA同学而言改材质预览效果很方便。对图形程序同学定制渲染管线也比较轻松,srp定制管线要比改虚幻的渲染管线方便很多。 但是项目大了以后美术工具链也会有一定的麻烦。因为它不是像虚幻的材质链那样设计材质系统。有很多时候,npc,小兵,角色的头发材质,有很多共性的参数,如果我希望b在a的基础上有一些参数变更。c又在b的基础上有一点参数变更。但是如果改一下设计风格希望abc都一起改。这个在unity你要把abc都全部调一遍或者写个工具处理。但是在虚幻里面,你对母材质的修改可以同步给材质实例。随着项目的美术资源的膨胀,这种设计上的差异会带来巨大的团队效率的差异。项目开发不只是程序的事,也要考虑一下美术同学的感受。 第三个阶段的团队就是总体技术美术实力都比较强的团队。那么虚幻引擎的起点和天花板都更高。我们知道如果相同的shader逻辑相同的输入资源是不存在哪个引擎的画面效果更牛逼一说。但是有好多高级功能unity是没有需要自己集成和开发的。比如就动态场景加载和开放大世界场景,要做hlod和streaming level的话,unity要自己整了。然后对开发工程师而言,遇到一些棘手的难题,也是在源生的c++环境调试和定位更舒服。比如遇到内存问题,我们可以稍微hack一下内存分配器的实现做一些追踪。对分配内存后一直没释放的业务做调用堆栈信息的收集和日志。 而unity环境哪怕你用il2cpp把代码翻译成c++打包了,翻译出来的那种代码绝对不是调试轻松可读性好的代码。哪怕给你打调用信息看到函数名大概猜到对应关系,可读性也是很低的。因为翻译的那种代码把一个普通的函数调用变为查methodinfo表,查type info表,把参数塞参数数组,还有c方式的调用。(有兴趣读读il2cpp机翻的代码)而源生c++或者c#写的脚本逻辑则可读性好很多。这两个的可读性和可维护性是天壤之别。当然,不出事的时候,c#写脚本很舒服。出事以后,你啃那种代码找崩溃就骂娘。所以第三个阶段的团队,起点和天花板我认为虚幻都更高。 做个总结是虚幻对初级者和比较强的团队更友好。unity对中间阶段的团队友好。
作者:韬韬同学VR(此答主是从业者)
时间:2022-02-04
重点:根据项目特点进行选择,不应该追求快速入手
作为市面上最成功的两款面向大众的游戏引擎,U3D和UE的使用学习都是非常容易的,追求更快速的上手应该具体分析自己对于前期阶段性成果的预期。
如果前期的学习研发倾向于程序,Unity可以快速上手,并且利用一些封装好的程序快速实现精巧的功能开发。如果希望快速学习打造出色的场景,那么Unreal可以带给初学者足够的成就感,因为延迟渲染的特性打造高质量画面会相对容易。
当然也要根据自己的积累去甄别选择,如果之前有C++的基础可以选择Unreal,C#则自然而然选择Unity;如果了解HDRP渲染管线的应用,Unity也可以快速打造高质量的画面;如果对于程序的积累几乎为零,那么Unreal的蓝图相对要更好入手一些。
简单了解的话,两款引擎都十分出色,十分适用于初学者,有长期精研的打算,还是需要根据项目特点进行选择,不应该追求快速入手。
作者:讨狐之猛将(此答主是从业者)
时间:2022-02-04
重点:ECS模式、C#、C++、crash定位、蓝图编程的复杂度、工具链
评论区其他人:似乎UE5也具有ECS了
首先这个问题很难一概而论,难度是根据使用者自身的条件以及目的来确定的,以下仅作为个人经验供大家参考,如果存在事实性错误请不吝赐教。
首先,如果是一名从未接触过游戏引擎,刚刚入门游戏开发的新人程序员的话,注意,是程序员。Unity是更容易学习的。Unity精巧的ECS模式以及C#语言本身的优雅都十分有助于程序员的学习,一个新手游戏程序员只需要花费很少的精力便可以上手游戏gameplay编程,而UE的gameplay框架更加复杂,使用者在缺乏经验的情况下要写出符合标准的代码更显困难,UE本身沉重的历史包袱也会让这个过程更加曲折。
而对于经验老道却没有参与过游戏编程的程序员,个人认为反而UE更容易入门,因为UE的框架更加标准化,尽管没有Unity那么自由,标准化的框架却可以方便从未接触游戏开发的程序员快速了解游戏开发中常见的问题。并且可以直接阅读引擎源码,使用Cpp的宏来解决跨平台问题而不依赖于虚拟机,crash后更容易定位,对于一个经验老道的程序员而言一定是一件令人愉悦的事情。
而对于一位独立游戏开发者而言,个人认为Unity和UE各有千秋,上手难度取决于使用者的目标,毕竟我们需要的“上手”往往只是学习开发我们的游戏需要的知识,独立游戏开发者可以但不必要挖掘引擎的每个细节。
首先,Unity的gameplay编程比UE更加方便是事实。是,UE有蓝图化的编程,但蓝图是一门完善的语言,使用蓝图编程同样遵守软件开发中的各项约定,传统编程的知识依然重要,过于低估蓝图编程的难度造就了各大视频网站上大量游戏demo而少有游戏成品的结果,并不仅仅是因为制作者没有时间,缺乏对大型软件的维护经验也是一个不可忽视的原因。
但UE对比Unity的显著优势就是完善的工具链,与其他游戏开发工具的方便交互等,比如自带的本地化工具,优秀的动画控制系统等等,如果独立游戏开发者试图开发一个3D ARPG,我认为UE更容易上手,开发的过程也会更少碰壁。而开发一个2D游戏,如奥日与黑暗森林,Unity更容易上手。
很遗憾受限于个人能力与阅历,无法对TA,美术等工种的使用习惯提出有价值的总结,但个人生活中,认识的的美术朋友认为UE容易上手的多,而TA和图形程序员因为自身的坚实基础,往往认为差不多。
某禁止转载的答案
时间:2022-02-03
重点:蓝图无法用git管理
作者:powerking
时间:2018-02-21
重点:服务端方案、蓝图隔离业务逻辑和底层功能
u3d还比较初期,用来开发只有客户端表现的单机游戏是可以的
ue毕竟是老牌的游戏引擎,有完整的服务端方案,而且开放源码,非常适合开发大型网游
u3d其实也有服务端方案,但他的服务端方案就是再开一个u3d在服务端跑。。。。承载力非常的低,而且针对客户端表现的开发模型非常不适合开发服务器
语言层面,u3d首选c#,可以快速开发,但是效率肯定不如ue的c++
c++效率高但是不适合快速开发,ue其实是提供了比较好的封装,让你能方便的用c++
至于蓝图,你做小型游戏用c#自己写当然没问题
当制作大型游戏,尤其是MMORPG时,用蓝图隔离业务逻辑和底层功能是非常需要的。
想象一下在几百人的大团队里,每个人都到你的底层代码里加几行,那是相当的酸爽,完全没法控制设计架构,会乱套的。
ue是针对大型团队开发模式做的,策划只能接触到蓝图这一层,只能用底层模块组合搭建业务逻辑应用,
程序员负责实现底层模块,控制代码结构,互不干扰,才能够保持架构稳定
作者:岳振(此答主是从业者)
时间:2015-08-11
重点:尽在掌握的感觉、都是工具而已
两个都用过,现在在用unity。
工具链而言,unreal3/4要更好,更全面。unity更适合小团队使用,团队协作,资源管理,工具的不完整以及不得不提的性能问题都使其不太适合大型项目或团队的开发。
如果团队中有一两个能驾驭unreal的程序员,而且不急着出产品的话,建议用unreal。
没有,且是小团队,项目规模不大,建议unity,更快上手。不过不开源不方便一些底层优化和定制。C#的一些高级特性在游戏开发中不见得是好事。mono的性能问题也多被吐槽。
作为游戏程序员,我想说的是,还是喜欢"一切尽在掌握中的感觉"
但一切还是看项目需要。
都是工具而已。
作者:陶仁贤(此答主是从业者且经常发布虚幻商城免费素材的文章)
时间:2015-08-11
重点:插件 VS. 完整流程、源码是否公开
就研究之后大概可以这么分吧
- Unity,引擎本身只做主干部分,很多功能自身并不重点开发,比如材质,大部分都依靠Sharder Forge之类得第三方插件完成,Unity5的灯光是Enlighten的插件。 而UE4更多的是自身有一个完整的流程。
- 获取方式,UE4公开所有源代码,任何人都可以免费下载,就算开发过程中遇到坑也可以自己走出来。 Unity个人可以下载使用,但是源代码不公开,遇到坑就需要等别人了,或者自己花10W一年买服务。
- 游戏发布,两个引擎基本都可以发布到现在的所有主流平台,不过是因为Unity在手游平台上有过一些不错的第三方作品,所以大家可能会认为它只能坐手游轻量级游戏,UE因为PC和游戏机大作比较多,大家可能会认为它只适合做大型游戏。
主要区别在于,如果你想做游戏,用Unity,你可以几乎买到所有资源,抄一抄,省事。但是第三方有可能存在兼容性隐患。
用UE4,你可以不需要程序员,只要脑子逻辑清晰,一样可以完成独立游戏作品,不依赖第三方工具,不怕第三方工具兼容性问题。可以比较容易做出高品质游戏
结论
结合一些从youtube视频中看到的信息,总的来说,两款引擎对于新手入门来说功能差别不大。不过在bilibili搜索时,以unity为关键字的搜索结果粗略看起来是要多余unreal的。
对我自己而言。从技术角度,我看C++是比C#顺眼的,学起来会更开心,同时学习两门语言的话也比较消耗精力,容易导致都只学到了皮毛而不能深入。而且C#也有C#的难点。
从心态角度,“只是工具而已”这句话提醒了我,学习引擎的目的是为了更好的创作内容,而不是为了学习引擎而学习引擎。即使在初学阶段选择了一个引擎进行学习,学习深入之后,当自己能够发现另一个引擎的优秀之处时,也仍然可以进行学习。
另外我之前一直抱着一种“渴望被公司选中”“寻找最优解”的状态去选择,因为unity“简单”“用户多”“招聘岗位多”就想要学unity,结果强迫自己的学习过程很痛苦,现在想想只是初学状态即使放飞自我其实也不会“跑偏”到哪里去的,而且好心情还能提高学习效率。
对于初学者,如何做选择这件事大约是无解的,因为不了解所以难以做选择,即使看了他人的回答也很难有切身的感受。而初学者走过的“弯路”其实就是成为高手的“经验”,我这样相信。
综上,最后我决定先学习unreal,unity先放一放。也希望读者能够找到合适自己的选择。