Interviews News

使用 Rider for Unreal Engine 开发新游戏,来自 Wargaming 的开发故事

Read this post in other languages:
English, Français, 日本語, 한국어, Deutsch, Русский

在过去的一年半中,我们一直在进行 Rider for Unreal Engine 的抢先体验计划,这是一款用于使用 Unreal Engine 以 C++ 开发游戏的全新 IDE。该计划吸引了数以万计的独立游戏开发者以及众多游戏开发工作室和各种规模的公司。我们很想知道用户们最看重产品中的哪些功能,喜欢哪些功能,以及认为可能缺少哪些功能。我们决定与 Wargaming RED 的技术总监 Viacheslav Dubikovsky 进行交流。Wargaming RED 是一家近期于俄罗斯莫斯科成立的游戏开发工作室,隶属于 Wargaming Group Limited。采访由 .NET 和 C++ 工具产品营销经理 Anastasia Kazakova 和 Rider for Unreal Engine 项目经理 Alexander Pirogov 主持。

Viacheslav Dubikovsky

Technical Director at Wargaming RED

Viacheslav,你好! 可以和我们讲讲你们正在做的项目吗? 这是一款什么样的游戏?

我们还没有宣布名称,因为有保密协议,我没办法透露太多信息。 我只能说这是一款科幻的,基于会话的第三人称射击游戏。

你们正在使用 Unreal 作为游戏引擎吗?

是的,没错。 我们目前正在使用 Unreal Engine 4.26 以 C++ 开发游戏,但将逐渐迁移到 4.27。 我觉得我们不会把这个项目移到 Unreal Engine 5,因为此版本渲染方式不同,如果迁移到这个版本,我们可能必须重做已经创建的所有游戏艺术。

WG team

这个项目是如何计划的? 你们使用了哪些技术呢?

正如我所说,这个项目以 C++ 编写,并基于 Unreal Engine 构建。 我们正在大量使用 Unreal Engine 反射机制以及 C++ 模板元编程。 我们有两个 Mono 仓库,一个用于游戏本身,另一个用于引擎。 主要游戏逻辑存储在共享模块中。

使用代码编辑器时,UE 反射机制通常会带来最大的挑战。 处理包含如此多宏定义的代码非常困难,从语言本身的角度来看,这些宏定义几乎毫无意义。 很少有开发者能够自如应对。 这就是 Rider for Unreal Engine 大展拳脚的地方!

有多少位开发者参与了这个项目? 他们使用的主要工具有哪些?

我们的团队约有 25 位程序员。 其中三分之一使用 Rider for UE,其他人则使用各种版本的 Visual Studio。 采用 Rider 之前,我们使用的是 Visual Studio,包括普通版本或者带有 Visual Assist 或 ReSharper C++ 的版本。 但无论是否采用插件,VS 编辑器都经常出现性能问题。 使用 Visual Assist 时,它的语言功能对我们来说不够准确(尽管现状可能已有所好转)。 相反,Rider for Unreal Engine 却展现出优异的性能,至少在处理 UE 代码方面表现出色。

迁移到 Rider for Unreal Engine 对你们来说容易吗?

我的第一印象是:太好了,它支持 VS 键盘快捷键! 我的所有 VS 技能都变得唾手可得。在用户界面方面,Visual Studio 的 UI 在某些方面似乎更加人性化,例如调试,这可能是因为我使用 Visual Studio 的时间更久。 但不得不说,Rider 的 UI 在视觉上非常吸引人。

尽管如此,从使用多年的工具迁移出来可能会比较棘手,因此我们的一些同事仍在坚持使用 Visual Studio。

到目前为止,Rider for Unreal Engine 的哪些功能对您的项目而言最为实用?

应该是导航、查找用法、跳转到符号声明、转到派生符号和基础符号 – 我们一直在使用这些功能,无论是在我们自己的代码中还是在 Unreal Engine 代码中(因为引擎代码是开发者的主要文档来源)。 要高效使用 Unreal Engine,另一个关键之处是能否快速查找指向字段和函数的链接以及能否快速进行代码导航 – 这正是 Rider for Unreal Engine 的长项。

然后是静态代码分析 – 能够指出代码错误的检查功能。 在编辑器中直接查看错误,甚至在编译之前就能得知错误,这可以节省大量时间。 这样的错误如果进入编译阶段,可能就意味着要在编译器和开发者之间周旋数小时之久。 当然,我们不会以这种方式发现所有错误,尤其是在模板化代码中。 但 Unreal Engine 本身几乎不使用模板,因此只剩下一小部分错误需要查找和修正。 检查功能支持建议自动添加缺失的 include 指令,这也有助于节省时间:借助 Rider,用户不必思考需要和不需要包含哪些头文件。

同样令人惊讶的是,Rider 了解 Unreal Engine 中实现的反射机制,并支持针对反射标识符和宏提供自动补全。 您通常不会记住这些内容,因此 Rider 的提示着实可以加快编码速度。

我还须提到的是解析资产以及将蓝图与 C++ 源代码绑定。 这个功能的使用频率并不高,但一经使用便颇具价值。 尤其是在重构并更改 C++ 源代码中的某些内容时,在蓝图中查看用法非常实用。 与配置 INI 文件和类属性的默认值相同:您通常可以在代码中直接查看这些值,不需要在 INI 文件中进行搜索。

最后且同样重要的功能是 Unreal Editor 集成,也就是 RiderLink/UnrealLink 插件。 通常,我们会从 Rider 调试器中启动 Unreal Editor,然后在其中进行实时编码。 在我们暂停和恢复游戏时,无需离开 Rider 即可查看日志,这有时可以显著提升效率。 例如,如果我们使用第三方插件(用于集成 Steam 或外部聊天、构建游戏管道等),我们甚至不必切换到编辑器 – 只需查看日志并暂停/恢复编辑器即可。

说到这里,我有一些关于如何增强 Unreal 日志的建议:

  • 添加更多筛选选项。 由于日志数量可能成百上千甚至更多,选择正确的类别较为困难。
  • 在日志中同时高亮显示多个匹配项 – 这是一个十分常见的用例。

谢谢你分享这些想法! Rider 的调试器怎么样,你们使用过吗?

当然了。 对于编辑器而言,没有调试器便不可谓真正的开发工具! 坦白地讲,早些时候我们确实遇到过一些 Rider 的调试器在断点处未停止的问题,但看起来这些问题已经得到修正。 我们最常用的调试功能绝对是逐步执行代码。 有时,我们会使用有条件断点。 我们喜欢调试器显示 Unreal Engine 对象内容的方式。

你们主要是在桌面端进行调试吗?

目前为止是这样的。主机游戏是我们的未来计划,但现在还没有实施。
 

注:较为遗憾,Rider 尚不支持在主机端进行调试。 我们正就此事与主要的游戏机制造商进行交流。 这些过程可能需要很长时间,有时还要应付许多繁文缛节。

WG brand

我们还想聊聊版本控制系统。 你们使用了哪些?

我们主要使用 Git,它支持在多条分支上积极开发新功能。 我们使用了 Git 与 Rider 的集成功能。 但对于变基,我们则使用 Tortoise 客户端,因为它更便于掌握大局。 变基可能是最为复杂的 Git 操作。 我们尝试自动执行变基来让它更加易于使用,但目前为止还未奏效。

在我的其他一些项目中,我还使用过 Perforce 和 PlasticSCM。

你们分析代码吗? 如果分析,你们是否使用第三方分析工具?

是的,我们使用 Unreal Insights 分析代码。 在收集分析信息方面,原生 UE 工具十分强大,几乎无可匹敌。 但谈到可视化,当然也可能会有值得改进之处。 我们使用自己的工具来绘制 CPU 使用率图。 Unreal Insight 在检查帧内容方面表现尚可,但它并不能帮助查看所有动态,这就是我们决定制作自己的工具的原因。

感谢你接受采访,Viacheslav! 祝你们的游戏项目一切顺利!

我们期待你们在完善 Rider for Unreal Engine 方面提出更多想法。

本文英文原作者:

Lei

Anastasia Kazakova