为什么unity愿意用c#作为代码语言,而虚幻却使用c++?

您所在的位置:网站首页 wpf嵌入unity3d 为什么unity愿意用c#作为代码语言,而虚幻却使用c++?

为什么unity愿意用c#作为代码语言,而虚幻却使用c++?

2023-03-14 11:29| 来源: 网络整理| 查看: 265

泻药,作为一个很喜欢这个引擎的UE黑头子,退乎前来理性分析一下,希望社区的哥们们轻点锤。同时我发现很多社区的朋友因为用多了U++,变得无法分辨引擎特性和语言特性了,这里权做一些指正。

从结论来说,UE的这套东西成型非常早(C++04年代),并且经过了非常非常长期的迭代,所以从设计角度看现在处于一个尴尬的境地。比起隔壁联合的C#套装,比较落后。在现在的机器上,比起一些用lua的inhouse,性能优势也好不到哪里去。当然这里只是阐述当下的客观事实,并不是我对Unreal有什么轻视鄙视的想法。软件工程本就没有银弹,Unreal现在的体系,只能说是Epic在多年游戏制作中面向实际需求,完善内部工作流进行迭代的直接结果。

比起Unity这样的轮子专业户,Unreal面向需求(特别是内部需求)的味道非常强烈。那么对立地,设计层面上就必然显得不是那么优雅。

U++ & UnrealScript

虚幻只提供C++作为文本代码语言,只能说有历史遗留原因,也存在它自己的一些考量。

首先Unreal不用C#,并不是说它就不要脚本了。只不过比起使用现成的C#,lua等脚本,Unreal选择基于C++,造一套虚拟机,实现一套自己的脚本。这套东西,当年叫做UnrealScript,如今叫做BP,打底的就是大家所说的U++。至于为啥,首当其冲的自然是性能。UE的GC就是经典例子,C++实现的非通用GC,可以渗透到每个细小的角落进行优化(活用帧概念、考虑Streaming等),性能上基本算是无痛。

UE3的年代是Kismet和UScript并存的,并且有大量的代码遗留下来了。反射系统里面你可以看到UScript的各种痕迹,BP里面你也能看到各种Kismet的遗产。通用BP节点本身,基类也是以K2为代号的,取意自Kismet2。

那么这里就可以谈下我题首引出的那个问题了。作为脚本的底层,U++中的反射序列化网络GC等等一大堆特性到底属于语言特性还是引擎功能呢?结论是很显然的,它们是Unreal的引擎功能,同时是UnrealScript的语言特性。所以U++的各种东西都围绕着基类UObject来进行,而不是直接对C++进行语言机制补全。当UnrealScript被腰斩,这个RuntimeSystem透过C++直接暴露出来的时候,各种违和感就突显出来了。

用人话来说,C++拖着一个庞大的运行时系统,就是呈现在你面前的U++了

被干掉的文本脚本

那为啥Unreal扔掉了UnrealScript呢?这可以算作Unreal面向内部需求采取的一种折中了。维护一套文本脚本比较费神是一点,但最大的原因在于Epic可能真的用不上这套东西。

作为主机平台的FPS专业户,Epic对文本脚本的需求可以说不是那么重。不像MMORPG,FPS游戏的大部分逻辑,都在场景里跑着的一个个Actor上。不像ARPG,有那么多复杂的技能。在实践中,策划甚至程序直接拉拉连连看,向场景里面一丢,就能实现大部分的功能。影响性能的,直接重构到C++。所以Epic发现自己真的用不了太多UnrealScript这团鸡肋了。

于是壮士断腕,奥利给干了,一刀下去UnrealScript就人间蒸发掉了。美国杨过,就这么横空出世了。

但是这刀下去,带来了一些灾难性的后果。爽了一时,爽不过一世。随着Unity步步紧逼,Unreal开源,Epic开始硬着头皮推进商业化社区化的大潮。各种各样的团队,多元化的需求,这时候开始涌现出来,独臂侠杨过这时终于发现耍不了双刀了。尤其是到了我们天朝更是水土不服,没了文本脚本,多人协作简直要了老命了。版本管理直接暴毙,复杂逻辑一直编译,种种蛋疼之处层出不穷。

BP好用吗?对我个人来说当然是好用的,对于做FPS的关卡设计来说那肯定是香的。但是痛就痛在为什么没有文本脚本呢?对于一些类型的游戏(MMO等)和超大型项目来说,这痛简直是痛到老二上了。

新时代的旧遗产

时光荏苒,在游戏之外,Unreal在视觉领域也披荆斩棘,打出了一片自己的天下。Unreal本身的功能已经强大到无与伦比,引擎的体量也膨胀到恐怖如斯的程度。

这时的Unreal想进行重构,已然是一件艰巨无比的任务了。迪拜塔都冲天上了,想动动地基何其容易啊。再说用户这么多,并且艺术领域的用户群体也大,完全重构的大版本换代,对用户和Epic自身而言都是很难接受的。Epic自然又选择了类似Win10的长期支持,滚动更新策略。

自此,格局就这么定下来了。作为吠舍群体,劳苦功高的程序员群体只能看着婆罗门美术们在Editor里面吃香的喝辣的,同时自己在VisualStudio里面吃翔的喝拉的。

让人不那么绝望的是,这个引擎还是在逐步变好的。很大一部分贡献来自社区支持,如果你想换掉蹩脚的UMG,有Noesis这样的GUI框架支持。如果你迫切的需要一套文本脚本,自有unlua等任君选择。

但有那么点不舒服的是,Unreal社区现在有股盲信盲从,满口官方工程师全能神,强无敌秒超平的不良风气,甚至很多人觉得官方就是最好的,从不关注甚至鄙视第三方组织的贡献。这与官方构建开源社区的理念也是背道而驰的,完全不利于社区的长期发展。

每个写过点编辑器和BP前端的少年们,都会怀想起当年自己在BP Graph里挥线如剑,纵横驰骋的英姿飒爽。每个奋战在RHI前线,彻夜撸管(线)的哥们们,又何尝不会于深夜忆起往昔,追念那Material Graph中的种种快意恩仇呢。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3