大家好!

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

在某个时刻,我开始想:这款游戏在 Unity 上会更快吗?问题是我对 Unity 并不熟悉。我了解它是什么,但从未用它开发过正式项目,为了一探究竟重写整个游戏对我们来说是不可能的。

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

说实话,我原本期待灾难。我们的游戏基本上是一个巨大的 GDScript 文件(超过 10 万行,是的,我知道…… XD),再加上大约二十个较小的脚本。但 Claude 没有手动、逐行翻译它。它编写了一个转换器,把 GDScript 转为 C#,并在 Unity 上加了一层像 Godot 那样的层(节点、绘制、输入、文件等),因此代码仍然是我们的游戏,只是换了语言。

四小时后游戏在 Unity 上运行了,没有任何编译错误。我至今仍不敢相信,哈哈。

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

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

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

https://preview.redd.it/7xj4heydohyh1.png?width=2560&format=png&au&s=aeeb72179a11a253851ef53d0f588bdcb5b2bd2e

https://preview.redd.it/9fpk2mnmohyh1.png?width=1920&format=png&au&s=5f210abd0c2f304168e6bf4bdb4d4fc6d31c7876

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