Unreal Engine 4 基于什么考虑把 UnrealScript 替换掉而改用 C++ 开发游戏逻辑?
Unreal Engine 4 基于什么考虑把 UnrealScript 替换掉而改用 C++ 开发游戏逻辑? Tim Sweeney解释为何Unreal Engine 4全面转向C++翻译:
前三代Unreal引擎都包含了一个脚本沙盒语言——UnrealScript,他提供了一个简单的GamePlay编程方式,从而避免用户使用复杂的c++语言。
对于新手程序员们,使用脚本编程的方式是好的。但是最终脚本成了引擎发展的阻碍。Unreal引擎在不断发展,我们也在不断的使用,实践。直到2011年,我们决定使用纯C++架构,这样做原因大致如下:
1.作为一个引擎,随着社区不断的成长,将原生C++功能导出为脚本功能的需求越来越大,如果要做出一个完整的沙盒功能的脚本,最终导致整个引擎变得很复杂,庞大。
2.实现C++与脚本之间的通信,需要一个多语言的接口以调用函数及封送(marshal)数据。随着脚本接口的不断扩展,这层互操作性(interop)层的维护成本和复杂性像指数般增长。互操作性对于一些高级数据类型(如容器)也是非常棘手的,因为脚本语言的惯用法与对应的 C++ 模板,无论在表示方式和语意都有很大差异。
3.开发者希望发挥原始的C++特性的优势,最终导致他们在脚本世界和代码世界切来切去,浪费了大量的时间,简直是地狱。
4.开发者需要整体的驾驭代码行为,但是很快发现,脚本调试工具和C++调试工具是独立的和不兼容的。他们发现,如果不跟踪C++程序,发现脚本的错误有时没有意义,反之也是这样。
正是这些原因,Epic最终决定使用纯C++。这样的话带来很多方便的地方,UnrealEngine4作为一个统一的可调试的引擎,可以让开发者从C++与脚本交互的地狱中解脱出来,并且让程序员可以学习,修改和扩展。这样还带来一个好处,让游戏的效率提高,并且可以容易的集成其他c++中间件。
并不是说C++是一个很理想的游戏编程语言。比起UnrealScript,C#,JavaScript,它有很多的复杂性,危险性。但反过来换一种方式说,C++更加强大。
通过小心使用c++复杂的地方,你的编写游戏程序时将感觉几乎没有限制。你可以调试整个底层代码,修改他们,甚至和操作系统层,高级第三方库进行打交道。 玩了一下UnrealScript, 发现它的parser绝对是handcrafted. 在它上面扩展功能的话,体会一下原本写这个parser的程序员的心情. 修改一多很难自洽. 最后放弃了. 但是为了掩盖这个原因, 他编出了N个C++好的理由.
举几个简单的例子来证明我的猜测:
嵌套的注释:"/* /* */ */" var() private{private,mutable} float MaxValue; 这里{private,mutable} 里一定不能有空格.Begin Object Class=StaticMeshComponent Name=LootMarkerMeshComponent 这里的=两边绝对不能加空格DefaultProperties之前没换行就出错.
unreal4这么做肯定能列举100个理由,但不认同的人也能100个理由不喜欢, 但至少有一个理由让我很喜欢,就是没有负担的搭载任何我喜欢的脚本层了,比如lua,不用被强迫使用unrealscript. 其实,让更多人能够以更方便的方式来完成逻辑的搭建是一个很重要的事情,这也是Blueprint出现的一个重要理由,合适的工具能够给用户带来更大的自由度 UnrealScript和c++代码之间的互相访问使得开发代价指数级增长,最终不堪重负。也就是匿名用户所说的,嫌麻烦,他们受不了啦。
unrealScript太老了。 之前UnrealScript所实现的,无非就是反射,序列化,自动编辑器这些,代码还是需要程序员写,策划根本写不了
现在那些特性全部用C++实现了,蓝图还可以丢给策划写,就酱 3A游戏行业工业级语言,C++说第二,谁敢说第一??? 这是Tim Sweeney解释的原因。就不翻译了。
Why C++ for Unreal 4? 嫌麻烦
页:
[1]