
最新情报:Web平台.NET原型诞生
波士顿GodotCon现场:Web平台.NET原型诞生!
在5月6日的"Godot与Web生态现状"主题演讲中,Godot引擎Web团队负责人Adam Scott向全球参会者首次展示了一项曾被视作不可能实现的突破。
.NET团队负责人Raul Santos成功创建了可在Web端运行C#的原型系统。您可以点击下方链接进行体验:
https://lab.godotengine.org/godot-dotnet-web
这不可能实现?
我们曾尝试dotnet.js方案——未果。
探索过NativeAOT-LLVM路径——失败。
最初试过静态链接Mono运行时——同样碰壁。
近期Raul重新攻关,终于取得突破。在上面提到的路线中,静态链接Mono方案最具潜力,因此我们进行了深入探索。
目前已提交包含最新改动的草案PR(注意仍处开发阶段):
[.NET] 新增Web导出支持 #106125
需要强调的是,该方案仍不太稳定,且存在以下限制:
- C#项目必须严格匹配Godot模板支持的WASM特性(包括线程模型、异常处理、SIMD支持等)
- C#项目的TargetFramework版本需与模板构建版本完全一致
- 当前未加载全球化数据,仅支持不变模式(对多数依赖Godot本地化功能的用户影响有限)
此前遇到的核心难题是函数指针获取问题。我们通过在Mono运行时检索项目中声明存根(Stub)C#方法实现绕过。构建Godot模板时确保这些方法被包含在生成表中,从而支持运行时获取函数指针。
常规Web平台C#应用使用dotnet.js作为WASM文件加载器。Godot采用自有加载机制,导致当前缺失关键流程环节:Mono运行时导出的JavaScript函数在模板构建时仅为存根,而dotnet.js加载器会将其替换为dotnet.runtime.js中的实际实现。该步骤的缺失导致依赖这些JS函数的.NET API(如加密模块等浏览器API相关功能)出现异常。
尽管如此,这仍是重大进展,使我们得以构建浏览器端可运行的演示系统。
C#/.NET的Web支持路线图
当前Raul提交的PR仍为草稿状态,意味着需进行大量测试与开发工作。我们正全力推进C#/.NET的Web导出功能,但暂无法承诺具体发布时间表。若进展顺利,该功能将在下个Godot版本中亮相。
文件体积问题:.pck文件激增怎么办?
目前需在.pck主文件中包含部分.dll文件以支持C。简单原型.pck文件体积已达72MB,经Brotli压缩后可降至23.8MB。虽然Web部署通常建议最小化体积,但下文将介绍的预压缩功能将有效缓解该问题。
内置预压缩功能前瞻
我同时公布了即将推出的内置预压缩PR,主要功能包括:
- 新增引擎编译时模板文件压缩选项
- 增加导出文件压缩配置项
- 当目标服务器不支持预压缩文件时,预加载脚本将启动回退机制,优先下载压缩文件以节省带宽
未来展望
Web端C#/.NET支持与文件预压缩将是平台两大重要特性,将突破Godot用户的Web开发能力边界。期待您与我们共同见证这些激动人心的进展!
本文翻译自官网文章:https://godotengine.org/article/live-from-godotcon-boston-web-dotnet-prototype
您也可以查看Godot Hub的Godot PR日报栏目,获取更及时的Godot引擎改进内容。