|
发表于 2023-1-18 13:28:49
|
显示全部楼层
1.作为一个用了很多年U3D和C#的人来说,去使用UE4,本能上是拒绝的。原因很简单,U3D用户多,教程文档齐全。效果也在慢慢追赶UE4,这个时候换一个引擎其实从哪方面来说都很不划算,更何况UE4的开发语言还是C++,本文对于很多想接触UE4的U3D从业者或者引擎选型期间的初学者来说具有非常重要的参考意义。
2.我的技术栈背景。先简单介绍一下,我做过1年半Linux游戏服务器C++开发,当时主要基于boost::asio来做的游戏框架,所以对C++有一定的基础,这个对于转UE4还是很重要的,很多U3D程序可能从来没有接触过C++,如果硬转将会很经历一段时间的阵痛。做过5年U3D开发,主要从事游戏行业和大数据可视化行业。做过1年半C#服务器开发,类似于ET这样的服务器框架,http://asp.net core + .net core的技术组合。所以也算得上比较杂的小全栈吧,当然也会了解一下其他的比如HbuilderX开发App,或者http://Asp.net + Echarts开发网站之类的。但是毕竟这些后面这些没有经历过商业项目,上不了台面,介绍这么多,只想表达一个问题,接下来的分析,也许我不一定是最专业的,但是我的分析还是有一定的基础的。
3.选择转UE4的原因,最核心是因为竞争公司使用了UE4,其次的原因是因为UE4开源,再其次的原因是因为渲染效果听网上百度得来强于U3D。
4.UE4经历3个多月,虽然时间较短,但由于我本身比较熟悉U3D,C++,所以上手UE4还是非常快的,然后我从以下几个地方进行对标UE4和U3D的区别。
A.开发语言,Unity使用的是C#,UE4使用C++ 和蓝图混合开发,蓝图是一种可视化脚本语言,类似于Unity里面的PlayMaker插件,很多美术工种和策划工种的同事特别喜欢用这种可视化编程插件,UE4的C++,跟我以前在Linux写的C++还是有很大区别的,他的用法更像MFC和QT,典型的额特征就是特别多的宏,这些技术对宏的使用基本上是把C++的语法发挥得淋漓尽致了。UE4的宏主要为了解决两个问题。1解决代码量,通过宏编译和生成来节省重复代码的开发,2解决C++语法本身不支持反射的局限性,用C#的都知道,C#,Java这些语言虽然跟C++都是面向对象的,但是他们可以通过反射拿到对象本身的属性,比如方法名,成员函数类型之类的。但是C++本身语法不支持,至少C++11这个版本前应该是不支持的。但是这带来一个缺点,就是编译速度特别慢,按分钟计算,也许你改了一句代码,开始编译,然后去上完一个厕所回来后,结果发现他还在编译。当然可以通过增量编译来加快编译速度,但是依然没法跟C#相提并论。当然有人可能会说,可以不用C++,只用蓝图就可以编译很快了,但是我很遗憾的告诉你,蓝图的支持是非常有限的,连double,decimal之类的数据类型都不支持,更何况其他设计大量数据运算结构解析之类的逻辑,蓝图处理起来就不是那么擅长了,所以这个是策略问题,逻辑和流程交给蓝图,C++专心做框架和底层相关,来加快开发速度。
B.UI框架,Unity现在主流是UGUI,UE4是UMG,UMG相对UGUI来说还是差得有点远,UMG现在的稳定性和易用性相当于Unity的NGUI插件的非常早期的版本,有的人说可能是不习惯导致的,其实这个还真不是,这个是框架设计的问题,UMG并不是一个全新设计的系统,是基于Slate改过来得到。Slate相当于Unity的OnGUI,但是比OnGUI还难用,原因就在于他有特殊的宏语法,这个语法不支持调试,上手成本较高。UMG的理念有很多让人无法理解的地方,比如每个零件要获取他的绝对坐标和相对坐标,很难做到通用,变更父子级关系需要重新托位置等。都使这个变得很麻烦,当然有人使用HTML来代替UMG,但是这个仅限于windows平台。所以大多做UE4的项目UI都不能设计太复杂了,比如图表之类的。如果特别熟悉源码结构通过C++也能改,只是上手就更长了
C.材质编辑,最开始U3D这一块肯定是比不过UE4的,但是在U3D出了ShaderForge,ShaderGraphic之类的插件后,易用性基本上也在追赶UE4了。越到后面插件会变得更小。
D.工种区别,U3D的程序大多使用C#,Lua,都是非常强逻辑的开发语言,所以程序的技术功底在经历一两年后往往比较扎实,UE4的C++程序员,程序功底当然也很容易被磨炼出来,但是UE4的蓝图程序,很多可能从来都没有写过C++或者接触过其他的程序开发语言,由于蓝图易于上手,所以很多非程序工种,比如其他专业,或者美术工种都会开始使用蓝图慢慢开发一些流程和逻辑。久而久之他们也具备开发能力,但是由于没有语言基础,这类人技术往往比较薄弱,一两年后的程序技能远远不如U3D的程序,在解决bug方面就变得更老火了。当然也不排除优秀者,我只是以我得到观察来得出结论。当然蓝图易于上手也带来另外一个好处,就是给美术赋能,这使得UE4有非常多的美术有一定开发能力,更容易培养出TA来,相对来说,U3D的美术特效,材质这些工种很难上手写代码,更难产生TA.
E.3D场景:UE4的3D场景处理,自动LOD,于其他3D工具有专门的datasmith插件配合,对于优化兼容,相对U3D来说更成熟。作为程序设计场景搭建工作会少一些,最直观的一个问题就是UE4的场景不能非常方便可见即可得。也就是没有U3D的Game视口,这个对于调试修改来说不是特别方便。当然习惯了也不会特别在意。
F.接触时间不长,后面有更多心得再继续补充,这里做一个总结,总体而言,UE4更偏向美术工种,而不是程序,U3D对程序员更友好些。UE4虽然开源,但是稳定性太差了,经常各种崩溃或者bug,由于开源,文档方面基本上很难找,得依赖自己去分析源码。UE4对于扩展其他的C++库相对U3D来说更方便,比如vlc之类的,UE4在PC平台的兼容性比U3D要好,U3D经常偶尔遭遇360杀毒软件等兼容问题时非常难解决,但是UE4相对好解决一点。 |
|