令人“悲哀”的 C# 游戏生态 —— 主流引擎支持现状与现实困境

 

506ebc008689d9245d98edd8bcd691ba

 

头图与文无关

令人“悲哀”的 C# 游戏生态 —— 主流引擎支持现状与现实困境

前言

本文中所说的悲哀,是笔者个人的感受。我之所以认为“悲哀”,是因为没有这么一个/一种开源的,且对C#有着很完善的支持的游戏引擎。

游戏引擎对C#的支持

在本文截稿日期(2025年12月12日)为止,在我印象里在世界范围内最具人气的三大游戏引擎分别是Unreal Engine(UE、虚幻引擎)、Unity(团结引擎)和Godot。在这三个引擎中,只有Unity和Godot对C#有官方支持。UE官方支持C++,曾有过第三方C#插件,但现已停止维护。

Unity对C#的支持

C#是Unity官方目前唯一支持的,用作游戏脚本的语言。其对C#的支持非常完善。在游戏调试阶段,使用其二次开发的Mono、JIT编译C#代码,使得在调试阶段无需等待漫长的编译环节。在游戏的导出阶段,则使用IL2CPP技术,将C#代码编译为对应导出平台(最后要玩这个游戏的玩家设备)的原生机器码,以提升游戏在玩家设备上的运行性能。

IL2CPP,即Intermediate Language To C++,是Unity私有,闭源的一种技术。
对于一般的C#程序,通常是先把C#编译为Intermediate Language(中间语言),然后再让C#的运行时(Mono, .NET Framework, .NET Core等)解释运行。有点类似Java的字节码。
而IL2CPP,可以把Intermediate Language转换为相同功能的C++,然后再把C++编译成对应平台的机器码。让游戏拥有极致的运行性能。

我很长一段时间没有接触Unity。原因是Unity是商业非开源项目,由商业公司主导。

为了牟利,Unity曾经还推出过“安装费”这样的让人大跌眼睛的商业政策(虽然这个政策很快被收回)。

在国内,甚至还有团结引擎这样的特供版本。让我长期对Unity不抱有很大的好感。

Godot对C#的支持

据说为了吸引Unity开发者使用Godot,同时微软曾对Godot给出过一笔“慷慨”的捐款,让Godot很早就提供了对C#的支持。Godot 官方在文档和社区讨论中多次强调,C# 是其官方支持的脚本语言之一,并试图将其定位为与 GDScript 并行的选择。但事实似乎并非如此。

Godot4相对于Godot3而言,将其使用的C#运行时从Mono迁移到了.NET,但是其在迁移后至今(Godot 4.5.1 stable仍未适配)仍未适配C# WASM,使得Godot 4尚不支持导出到Web(WASM),不能把游戏导出到网页上。

WASM,全写作WebAssembly。我暂时没找到它的中文译名,但我认为可以理解其为网络汇编。即一种运行在浏览器上的,类似汇编语言的语言。相对于JS这样的脚本语言而言,会有更高的运行效率。

同时,Godot 4 对iOS和Android平台的支持也是“试验性”的。换言之,没有成熟和完善的支持。

具体可参考下面的截图,截图自Godot官方文档(4.5)https://docs.godotengine.org/zh-cn/4.5/tutorials/scripting/c_sharp/

image

其中,对iOS,官方的描述是:

iOS support is currently experimental and has a few limitations.(对iOS的支持当前是实验性的且还有少量限制)

  • • The official export templates for the iOS simulator only supports the x64 architecture.(对iOS模拟器的官方导出模板只支持x64架构)
  • • Exporting to iOS can only be done from a macOS device.(只能从macOS设备导出到iOS)

只能从macOS设备导出不是大问题。因为据我所知,打包iOS应用只能使用macOS。对于iOS开发者而言,一台Mac设备是必不可少的。

但是,“对iOS模拟器的官方导出模板只支持x64架构”。我不知道这句话是否隐含:存在“对iOS模拟器的、支持Arm64架构的官方或非官方导出模板”(似乎是没有的,至少我没查到有)。

如果的确只能支持x64架构,那说明其对iOS的支持基本可以说是没有的。因为,苹果公司从来没有发布过x64架构的iOS设备,包括iPhone、iPad和iPod。使用这个模板导出的游戏只能运行在使用Intel芯片的Mac的iOS虚拟机上。

这样的“试验性”支持对于一个正式游戏项目而言是不可接受的,更不必说商业化项目了。这样一来,基本上可以说Godot 4 C#只支持三大桌面平台(Windows、Linux和macOS)。

对我个人而言,在Godot提供了官方支持的两种语言中,我更偏向于使用C#。主要原因是我认为C#是一门更强大、更完善、更成熟的编程语言。它和主流的开发语言Java、C++在语法上更相似,有着高级的面向对象特性。有着更广泛的使用生态,在后端开发、桌面开发甚至机器学习方面有着很广泛的应用。另外,使用C#还有一个好处是,可以使用.NET生态下丰富的NuGet库。

在性能上,C#与GDScript各有优劣。一般而言,C#的性能优于GDScript。但是如果游戏程序要频繁调用Godot的接口,从C#到Godot的跨语言调用也是一笔不少的开销。在官方文档(见参考4)中说到,这种开销甚至在某种情况下会使其性能不如GDScript。

综上,Godot 4 作为一个开源游戏引擎极具吸引力,但其C#支持在移动端跨平台导出能力方面,尚不足以承载严肃的商业项目。

其他引擎

Godot 3 似乎有着对Web(WASM)、iOS、Android较好的支持。但是其使用Mono作为运行时,不支持C#新的语言特性。且Godot3本身也已经不再加入新特性,和Mono一样,进入了“长期维护状态”。

我查到了一个叫MonoGame的技术,但实际上它不算一个游戏引擎,只能说是一个游戏框架。没有编辑器、什么轮子都要自己造,在易用性上远不如Unity和Godot。

写在文末

本文仅代表作者个人观点,如有纰漏,欢迎友好的批评与指正。

参考:

[1]Godot官方文档,https://docs.godotengine.org/en/4.5/tutorials/scripting/c_sharp/
[2]Godot Blog.Raul Santos.Current state of C# platform support in Godot 4.2,https://godotengine.org/article/platform-state-in-csharp-for-godot-4-2/
[3]Reddit.hermitfist.State of Godot 4.4 Android/iOS using C#? Commercially viable?
[4]Godot官方文档,https://docs.godotengine.org/zh-cn/4.5/about/faq.html#which-programming-language-is-fastest

 

posted @ 2025-12-14 01:07  囫囵吞桃  阅读(0)  评论(0)    收藏  举报