我拿到了梦寐以求的工作——用 Rust 构建游戏引擎。现在该怎么办呢?

发布于 2024 年 9 月 10 日,作者:Alice I. Cecile ( 一只戴着猫耳朵、挥舞触手的卡通人物剪影,即 GitHub 的吉祥物和徽标 @alice-i-cecile )

我终于拿到了梦寐以求的工作。全职开源,用 Rust 构建游戏引擎。完全没有会议。还有什么能比这更棒的呢?我的背景很不寻常(植物生态学、自学编程和多年的残疾经历),能够得到这样一个很棒的社区的支持简直令人难以置信:我被来自各行各业的专家和初学者包围着,他们一起创造了不可思议的东西,而我因此得到了赋能。 支持我们

但是现在该怎么办呢?Bevy 四周年已经到来,@cart呼吁大家一起回顾过去一年,并为未来一年做好计划。我在 Bevy 基金会工作的前几个月过得怎么样?我正在做什么?

从业余爱好到正式工作 #

在加入 Bevy 基金会之前,我一直在帮助 Bevy:编写文档、分类问题、审查 PR、设计复杂系统和打磨粗糙的边缘。

我尽我所能,在做个人项目、偶尔的咨询工作和确保家庭生活顺利运行的间隙,处理着成千上万的小任务。多年来,这些努力累积了起来!阅读、思考、沟通:我从来不是那种为特定子系统编写大量代码或深入研究最晦涩的错误的人。但如果我倾听人们谈论他们需要什么,仔细思考一下,然后把它传递给那些愿意帮助的人,我发现自己可以变得非常有效!

这是一个很好的节奏。但突然之间,参与 Bevy 工作变成了我的日常工作!这意味着每周 40 小时,每天 8 小时,周一到周五 9-5 在办公室,对吧?好吧,当然,没有人关心我什么时候工作。或者我每天到底工作了多少时间。我们甚至没有办公室!但肯定的是,这应该是“真正工作”的理想模型,我应该追求它,即使它永远无法实现。

实际上,并非如此。起初,我试图坚持这种模式(完全出于我自己的意愿):周一到周五,每天 8 小时,严格的开始和结束时间。我专注于大型项目,尝试编写更多代码,并确保自己不会在允许的时间段之外工作。

这让我痛苦不堪。强迫自己长时间工作,在身体和精神上都是一种折磨。我不得不强迫自己不要分类这个问题、不要留下评论,或者不要处理那个 PR。而且,我们团队中几十个分布在全球各地的贡献者之间的对话根本没有 decency 停留在我的 9-5 时间表内!

那么,我是如何化解这个矛盾的呢?有时间和自由来处理更大的项目是一个巨大的优势,但所有这些小任务仍然很重要!尽管转向更灵活的时间安排可能对我来说更健康,但我需要确保工作不会吞噬我的全部生活。

我的解决方案:专注任务。每个工作日(但不包括休息日!),我会选择一个单一的任务来专注。编写一篇文档、审查一个复杂的 PR、添加一个功能、重构一段复杂的代码、准备一份设计文档、运行每周的合并火车……当我感觉良好的时候,我会专注于此,完成我能做的事情,一旦我的注意力分散或任务完成,就结束了。我当天“完成工作”了。

为了补充这一点,严格的 9-5 工作时间会更加灵活。我可以随时工作(事实证明,对我来说,工作时间相当长):处理成千上万的小事,帮助 Bevy 正常运转。但我不会有义务:不会有一种感觉认为我必须做这些事情,或者必须及时完成它们。我可以参加临时的深夜设计聊天,但仍然可以在约会之夜断开连接,因为毕竟,我已经几个小时前下班了。

这种平衡对我来说非常有效:让我在推动大型项目(bevy_color!对 leafwing-input-manager 进行重大重构!0.14 版本发布!)的同时,不会被大量的通知淹没。你会推荐使用它吗?可能不会!这需要一定程度的灵活性,许多组织不会给你这种灵活性,你需要有动力和自我激励,坦率地说,工作和生活的界限比大多数人所能接受的要模糊得多。但对于一个全职参与开源的人来说?绝对可以!

梦想工作仍然是工作 #

那么,在 Bevy 基金会工作了几个月之后:这真的是我的梦想工作吗?它是否符合我的预期?尽管我怀着无限的理想主义,但为一家你关心的非营利组织工作并不是万能药:如果工作条件糟糕,即使你是在做善事,也无法让你度过这一天。

从好的方面来说,我有

  • 一个我深信不疑的使命
  • 舒适的生活(我最近的预算显示税前收入为 84000 加元)
  • 与令人难以置信的人相遇并向他们学习的机会:包括 Bevy、Rust 和更广泛的游戏开发领域
  • 居家办公的安排,拥有不可思议的灵活性
  • 对工作内容拥有很大的自主权
  • 慷慨的欧洲式休假和病假政策

但它并不完美,这些优势也伴随着一些不足

  • 一个非常公开的角色,我每天所做的每一件事都是可见的
  • 一个非常小的非志愿者团队,充当所有必要但繁琐工作的后盾
  • 模糊的工作和生活界限
  • 薪酬远低于我能赚到的水平
  • 由于完全依赖慷慨的捐赠者来维持我和我热爱的项目,因此产生了生存焦虑

说实话,这很像创办一家初创公司。只是我并没有很小的机会变得比任何人都富有,而是有机会改变一个行业,帮助人们创造酷炫的东西!

学无止境 #

然而,最令人惊奇的是,我必须不断学习和成长。Rust?ECS?技术写作?项目管理?输入管理?社区管理?

我不能自满,只在我的舒适区内工作,只使用我已掌握的技能。总会有新的停滞不前的区域需要领导、需要审查的复杂且有价值的 PR 以及需要解决的棘手问题。即使我的天性偏向于设计和沟通,我仍然需要精通游戏开发所需的每一个领域。专家很棒,但要保持项目进展,我必须能够理解他们所说的话,并将它整合到更广泛的项目背景中。

在未来一年,我希望能够熟练掌握基本的自定义渲染、深入了解 Bevy 的资源解决方案,并认真学习响应式 UI。这应该很有趣,甚至可能推动我自己的游戏开发进度。

工作组:自我组织和赋能 #

我一直相信,构建系统和改变激励机制是彻底解决问题的最佳方法。当我刚开始在 Bevy 工作时,我们遇到了两个相互关联的问题:贡献者对复杂但有价值的项目的缺乏方向和审查感到沮丧,而维护者则带宽不足,对个人贡献者忙于工作而导致的项目进展缓慢感到沮丧。

于是就有了工作组:范围明确、协作性强的团队,致力于定义、探索和解决复杂问题。我很高兴看到它们取得了以下成果

  • 强调清晰、有充分动机的设计
  • 清晰地列出我们正在积极解决的问题
  • 一个将社区努力集中在共同目标上的空间
  • 一个为复杂工作提供现成审查者的来源
  • 一个机制,让有抱负的贡献者能够达成共识,彻底改变现状

bevy_color 工作组是一个非常活跃的中心,它解决了从头开始编写颜色库的所有棘手问题,而 0.14 版本发布工作组确实帮助 Cart 和我减轻了压力,即使这是一种艰苦的经历。

我真的很期待看到开放式工作组(关系、文本、音频、选择、贡献指南、场景、渲染图和曲线)在未来一年取得的成果!我会定期进行干预,以确保工作顺利进行,但总的来说,我对这个自我组织实验取得的成果感到非常满意。

技术展望:不再糟糕的用户界面 #

目前,Bevy 存在一个关键的技术限制:我们的 UI 解决方案很糟糕。虽然你当然可以争辩说所有 UI 解决方案都很糟糕,但 bevy_ui 确实非常不成熟。它包含太多样板代码,几乎没有预制的小部件,大多数难题都留给了用户处理。

虽然自 Bevy 首次发布以来,情况确实有了很大改善,但 bevy_ui 的工作方式与 HTML 相同:只是一些需要操作的原始数据结构。对于我们大多数用户来说,这还不够!Bevy 是 CAD 软件、复杂模拟游戏或开发工具(比如传说中的编辑器)的绝佳选择,构建 UI 太耗时,而打磨 UI 几乎不可能。

虽然我分享了我对 bevy_ui 应该是什么样子的看法,但我相信 @cart(以及 @viridia、@StarArawn、@UkoeHB 和 @SanderMertens)能够搞定大多数花哨的增量式、响应式、数据驱动的部分。相反,我想清理掉所有拖累我们 UI 解决方案的低垂的果实,无论他们最终选择了哪种解决方案。

在未来一年,我想

  • 切换到 cosmic_text,并正确支持非拉丁字符集
  • 简化对字体及其关系的理解
  • 支持基本的本地化和类似标记语言的富文本
  • bevy_ui 移植到一个完善的选择范式
  • 确保那些更喜欢简单布局的选项可以作为 flexbox 布局的替代方案
  • 添加焦点管理,方便用户使用键盘、游戏手柄和屏幕阅读器导航 UI
  • leafwing-input-manager 上游,让 Bevy 为 UI 和游戏玩法提供第一方按键绑定支持
  • 发布一些实用的标准小部件:单选按钮、文本输入、滑块等等
  • 编写涵盖真实用例的示例:启动画面、设置菜单、拖放式库存、各种游戏类型的 UI 模型...

这些东西都不会从根本上改变 bevy_ui 的工作方式,但总的来说,应该会为开发者和最终用户带来天壤之别的体验。

产品未来:超越 Rust 游戏开发 #

在以 Rust 为中心和以游戏开发为中心的领域,Bevy 通常因用 Rust 编写而被定义。但以这种方式思考游戏引擎,对于 Bevy 和整个生态系统来说都是一个陷阱。

压倒性的,专业的游戏开发者不会决定他们要使用 Rust,查看 Rust 游戏引擎中可用的选项,然后选择一个。虽然爱好者和那些想要学习 Rust 的人可能会以这种方式选择引擎(Rust 很棒,制作游戏是学习它的一个好方法),但这对于做出对业务至关重要的决策来说是一种无效的方式!

相反,他们会查看所有引擎以及它们提供的功能:Unity、Unreal、Godot 等等。每个团队和每个项目都有不同的需求和个性化的偏好:永远不会存在一个其他引擎都错误地没有选择的通用引擎。但是,如果你想在一个拥挤的空间中竞争,你需要既开拓又传达你的定位:一组你独一无二擅长的东西。

仅仅成为 Rust 中最好、最流行或功能最强大的游戏引擎是不够的,坦率地说,这几乎没有意义。Rust 太棒了,我认为从长远来看,它将是一个巨大的优势,但现在,游戏行业的看法是,它还不成熟,用它开发游戏速度很慢。

为了生存,不仅仅是一个爱好引擎,你需要吸引商业团队构建严肃的游戏,这些游戏建立在预算之上,拥有程序员、艺术家和设计师组成的混合团队。虽然你不需要在所有方面都比大公司做得更好,但你需要在某些方面比它们做得更好,并且对于某些团队来说,理性的选择应该是选择你的引擎。

虽然对于大多数项目和团队来说,我们还不是理性的选择,但我希望为我们在未来的真正成功做好准备。在接下来的一年,我想更多地与 Rust 之外的游戏开发者建立联系(打个招呼!),更多地了解真正的独立团队使用的流程以及他们面临的挑战。虽然小的改进会一笔一笔地流入,但我希望把目光投向地平线,了解有才华的小团队在他们的下一个引擎中寻找什么,并确保我们在朝着这些目标努力。

没有人(还)在用 Bevy 编写下一款使命召唤:围绕渲染、工具、培训、主机支持和风险的要求过于严格。但要让团队在 Bevy 中编写下一款《因子流》、《泰拉瑞亚》、《杀戮尖塔》、《空洞骑士》或《冥府》需要什么呢?是时候去弄清楚了!