引擎版本:Unity5.3 vs Unreal4.12
C#是一个写业务逻辑非常舒服的语言,甚至可能是最接近完美的语言,业务逻辑开发效率远高于C++和蓝图,但一旦出现非C++不可的问题,比如Lua绑定、计算密集型任务、扩展引擎C++部分等,虽然Unity也可以实现C#和C++交互,但犹如隔靴挠痒,好在这种情况不多,如果项目不幸碰到了,Unreal就是优势,如果项目碰不到,Unity就是优势。
C++开发效率很低,Unreal的C++脚本技术并没有成熟到改变这一现状。且Unreal C++心智负担非常重:反射体系、垃圾回收体系,甚至周边的UBT、UAT、UHT等等,想要彻底研究透却文档稀少,不研究透又没能成熟到不搞清楚就能安心做业务的程度。不过对程序员来说,有C++源码就是大过天的优势,如果能有时间和能力吃透这套体系,Unreal就是优势,如果没时间和能力吃透,Unity就是优势。不过业务逻辑开发效率低,这点Unreal是绝对的劣势,就算配合上蓝图,也还是比不过C#。
蓝图是一个架构非常先进的语言,如果你把它理解成是一个拥有继承、多态的面向对象理念的配置文件,它比XML、JSON、UnityPrefab之类强大太多,如果要理解成是LUA、Python这样的脚本,它和C++沟通之方便,也是主流语言中绝无仅有的。而且蓝图还一直作为引擎架构的核心在进化,比如性能问题:4.11之后蓝图可以直接编译成C++代码;正进展的编译成LLVM IR。但这并不是说蓝图作为业务逻辑语言是一个很好的选择,无法冲突合并,开发效率低下等都是客观存在的。
总的来说,在技术吃透的情况下,Unreal语言层面架构强于Unity,Unity开发业务逻辑效率强于Unreal,但需要考虑存在Unreal.js之类正在高速发展的项目,而Unity拿到源代码的难度越来越大。