简介

嘿,你对为 Bevy 做贡献感兴趣!随意参与任何你感兴趣的方面,我们会很乐意帮助你贡献。

如果你刚来这里,你应该看看我们社区的 行为准则。你也可以到 Discord 上来跟我们打个招呼 👋。这是一个不错的场所,你可以在这里讨论 Bevy 开发,提出问题,以及在更非正式的设置下认识其他贡献者和用户。

如果你正在寻找,请继续阅读

  • Bevy 的高级设计目标。
  • 我们在开发 Bevy 时遵循的惯例和非正式实践。
  • 有关良好开源协作实践的一般建议。
  • 无论你的背景或技能水平如何,你都可以帮助我们的具体方式。

我们很高兴你加入我们,一起构建!

我们正在尝试构建什么

Bevy 是一个完全免费的开源游戏引擎,用 Rust 编写。它目前有以下设计目标

  • 强大:提供完整的 2D 和 3D 功能集。
  • 简单:新手易于上手,但对于高级用户来说具有无限的灵活性。
  • 数据为中心:使用实体组件系统范式的面向数据架构。
  • 模块化:只使用你需要的。替换你不喜欢的。
  • 快速:应用程序逻辑应该快速运行,并且在可能的情况下,并行运行。
  • 高效:更改应该快速编译......等待并不有趣。

Bevy 目前还拥有以下“开发流程”目标

  • 快速实验胜过 API 稳定性:我们需要自由地进行实验和迭代,以便构建我们所能构建的最佳引擎。随着 API 证明其持久性,这将随着时间的推移而改变。
  • 一致的愿景:引擎需要感觉一致和连贯。这优先于民主和/或去中心化的流程。查看我们的 Bevy 组织 页面以了解更多详细信息。
  • 灵活性胜过官僚主义:开发人员应该感到高效,不受开发流程的阻碍。
  • 专注:Bevy 组织应该专注于出色地构建少量功能,而不是快速合并所有新的社区贡献功能。有时这意味着 Pull Request 会长时间处于未合并状态。这是专注的代价,我们愿意付出。幸运的是,Bevy 本质上是模块化的。第三方插件是解决此策略的好方法。
  • 用户界面 API 人体工程学优先:可靠的用户体验应该得到重点关注和投入。它应该很少为了内部实现细节而妥协。
  • 模块化胜过深度集成:尽可能使各个板条箱和功能“可插拔”。不要将不必要的板条箱、功能或类型绑定在一起。
  • 不要合并所有内容......不要过早合并:我们添加的每个功能都会增加维护负担和编译时间。只合并“通常”有用的功能。除非我们对设计是正确的 *以及* 我们拥有支持它的开发能力达成相对共识,否则不要合并重大更改或新功能。如果可能,先创建一个第三方插件/板条箱,然后在 API 在野外经过测试后考虑合并。Bevy 的模块化结构意味着“官方引擎功能”和“第三方插件”之间的唯一区别是我们的认可和代码所在的存储库。我们应该尽可能地利用这一点。
  • 对第三方代码重用的控制和一致性:只有在 *绝对* 必要的时侯才添加依赖项。我们添加的每个依赖项都会降低我们的自主性和一致性。依赖项还可能增加编译时间并存在引入我们不想要/不需要的子依赖项的风险。
  • 不要重新发明每一个轮子:与前一点相反,不要不惜一切代价重新发明所有东西。如果 Rust 生态系统中有一个板条箱是“事实上的”标准(例如:wgpuwinit),我们应该认真考虑使用它。Bevy 应该成为生态系统中的一股积极力量。我们应该将我们需要的改进推送到这些核心生态系统板条箱中。
  • Rust 优先:引擎和用户界面代码应优化并鼓励仅使用 Rust 的工作流。添加其他语言会增加内部复杂性,分散 Bevy 生态系统,并使用户更难理解引擎。永远不要为了与其他语言的兼容性而损害 Rust 接口。
  • 深思熟虑的公共接口胜过最大可配置性:符号和 API 应该默认情况下是私有的。每个公共 API 应该经过深思熟虑并一致地设计。不要暴露不必要的内部实现细节。不要允许用户“自掘坟墓”,而是将一个“快乐路径”API 优先于适用于不同用例的多个 API。
  • 测试你需要的:编写有用的测试。不要编写没有用的测试。我们 *通常* 对对每行代码进行单元测试并不严格。我们不想让你浪费时间。但同时
    • 大多数新功能应该至少有一个最小的 示例。这些也用作简单的集成测试,因为它们作为我们 CI 过程的一部分运行。
    • 功能越复杂或越“核心”,我们就越严格地进行单元测试。在这里使用你的最佳判断,如果你的 Pull Request 需要更多测试,我们会通知你。
    • 我们使用 Rust 内置的 测试框架
  • 欢迎新贡献者:投资新贡献者。帮助他们填补知识和技能差距。不要根据所需的技能或资格来阻碍 Bevy 开发。帮助新开发人员找到自己的位置。
  • 文明对话:我们需要共同讨论想法,最好的想法 *应该* 胜出,但对话始终需要保持尊重。请记住,我们都在一起,始终遵循我们的 行为准则

入门

Bevy 组织扩展到 Bevy 引擎本身之外,而 Bevy 引擎本身就是一个大型项目!入门可能有点让人不知所措,所以这里有一个鸟瞰图

GitHub 组织 有两个主要的存储库

  1. bevy:这是引擎本身所在的地方。大部分开发工作都在这里进行。
  2. bevy-website:这是 官方网站 的托管地,以及快速入门、新闻、贡献书籍、实时示例和我们想向用户展示的其他内容。

bevy 存储库本身包含许多较小的子板条箱。其中一些可以独立使用,几乎所有都可以进行模块化替换。随意四处挖掘,找到一个你感兴趣的!