大家好!

我是Victor,Dad and Son Games的爸爸。我和我儿子正在制作 Geometry Rift: Apocalypse,一款霓虹竞技场射击游戏,类似生存游戏,拥有剧情、强大的首领以及许多受街机经典启发的小挑战。我们使用 Godot 4.6 制作的,这是一种你在屏幕上会看到数百个敌人、子弹和粒子的游戏……所以性能一直是我最在意的。

有时我开始想:这款游戏在 Unity 上会运行得更好吗?问题是我对 Unity 并不了解。我懂它是什么,但从未用它做过严肃的项目,重新写完整游戏只是为了验证对我们来说是不可能的。

所以我做了点疯狂的尝试:我让 Claude 进行移植。

老实说,我本以为会是一场灾难。我们的游戏基本上是一份巨大的 GDScript 文件(超过 100,000 行,是的,我知道…… XD),外加约二十个较小的脚本。但 Claude 没有手动、逐行地翻译它。它编写了一个转换器,把 GDScript 转换为 C#,并在 Unity 上加了一层类似 Godot 的层(节点、绘制、输入、文件等),所以代码仍然是我们的游戏,只是换了语言。四小时后游戏在 Unity 上运行起来了,没有任何编译错误。我至今还不敢相信,哈哈哈。

它不只是说 "完成!",它还记录了 Godot 版的运行,并在 Unity 版中播放完全相同的输入,以确保两款游戏玩法相同。看到它在两个版本中完全相同的运行并像素对像素地比较,真是酷。这太疯狂了。我是说,谁能想到会像这样进行比较呢?

[Image link]

当然,并非一切都完美。我们发现了一些 Unity 与 Godot 运作略有不同的地方,通过并排比较两个版本后发现的。有一位首领有四个灯光,而 Unity 只使用了第一个。另一位首领的冲击波根本没被渲染。危险区域的红色边框消失了。而且在 Steam Deck 上有一个着色器错误地读取纹理大小为零,导致 8 位调色板变成了 1 位调色板 XD……这些都是小问题,很快就能修复。这比我原本担心的要小得多。

但真正大的事情是性能。仅通过移植,而不进行任何优化,游戏运行速度提升了约 35%。在最繁重的时刻,面对跑完一轮后的庞大 horde,速度大约快两倍。现在它在 Steam Deck 上可以跑到 60 fps,这正是我最想要的!

[Image link]

请注意,这并不是一篇“Godot 不好”的帖子。我爱 Godot,我们的游戏诞生于它,我也在上面学到了很多。根据 Claude 向我的解释,大部分提升来自于代码从 GDScript 到 C# 编译为原生代码,而我们的游戏在 CPU 上极其吃力。主要依赖 GPU 的那一屏在两个引擎中运行情况相同。所以如果你的游戏不像我们的,可能看不到同样的提升。但在我的情况,这太疯狂了。

自从几天前 Steam 上的版本已经是 Unity 版,我们每天都在继续开发。

如果你对我们是怎么做到的有任何疑问,请问我,我会尽力回答 :)

感谢阅读!

Victor. 爸爸.

PS: 你可以在这里下载免费演示:https://store.steampowered.com/app/4701970/Geometry_Rift_Apocalypse/