自定义 Bevy 功能和模块

Bevy 是非常模块化和可配置化的。它被实现为由许多独立的 cargo crates 组成,允许你删除你不需要的部分。较高级别的功能建立在较底层的基础库之上,并且可以禁用或进行替换。

底层的核心库(如 Bevy ECS)也可以完全独立使用,或者集成到其他非 Bevy 项目中。

Bevy Cargo Features

在 Bevy 项目中,你可以使用 cargo 的 feature 特性启用或禁用 Bevy 的各个功能。

这里我将解释其中的一部分,以及为什么你可能想要自己设置这些 feature。

许多常见的功能在默认情况下是启用的。如果你想禁用其中一些,请注意,不幸的是,Cargo 不允许你禁用个别的默认功能,所以你需要先禁用全部默认的 Bevy 功能后,再重新启用你想要的功能。

下面是一个你可能会用到的 Bevy 配置:

[dependencies.bevy]
version = "0.6"
# 如果有任何一个默认功能是你不想要,请禁用 default-features
default-features = false
features = [
  # 下面是常见的默认功能:
  # (留下你想要的)
  "render",
  "bevy_winit",
  "bevy_gilrs",
  "bevy_audio",
  "png",
  "hdr",
  "vorbis",
  "x11",
  "filesystem_watcher",
  # 下面是一些你可能不感兴趣的功能:
  # (有需要随意添加)
  "bmp",
  "tga",
  "dds",
  "jpeg",
  "wav"
  "flac",
  "mp3",
  "subpixel_glyph_atlas",
  "dynamic",
  "serialize",
  "trace",
  "trace_tracy",
  "trace_chrome",
  "wgpu_trace",
  "wayland"
]

(请看 这里,了解 Bevy 可通过 cargo 配置的完整功能清单)

图形和渲染 Graphics / Rendering

对于一个图形化的应用程序或游戏(大多数 Bevy 项目),你需要 renderbevy_winit

如果你不需要图形(如专用游戏服务器、科学模拟等),你可以删除这些功能。

音频 Audio

Bevy 目前的音频在功能上非常有限,而且有些残缺。建议你使用 bevy_kira_audio 插件来代替。禁用 bevy_audiovorbis

更多信息请看这一页

文件格式 File Formats

你可以使用相关的 cargo features 来启用或禁用对加载各种不同文件格式资源的支持。

更多信息见[这一页][cb::file-format]。

输入设备 Input Devices

如果你不关心对 游戏控制器或手柄 的支持,你可以禁用 bevy_gilrs

Linux 视窗后端

Linux 上,你可以选择支持 X11 或 Wayland,或两者都支持。只有 x11 是默认启用的,因为它是传统的视窗后端系统,它与大多数或甚至于所有的 Linux 发行版兼容,这可以使你的工程构建文件更小、编译更快。你可能想额外启用 wayland 来完全支持现代 Linux 环境。这将为你的项目增加一些额外的依赖。

开发功能 Development Features

在你的项目开发过程中,使用下面这些功能可能会很有帮助:

动态链接 Dynamic Linking

dynamic 会使 Bevy 作为一个共享的动态库被构建和链接。这将加快增量构建的速度,当你更新代码后试图进行测试时,这可以减少挫败感。在我的机器上,我的项目在没有启用这个功能的情况下重新编译需要2秒,而启用这个选项则仅需要0.5秒。这使得启动游戏的感觉几乎是即时的。

众所周知是的,这在 Linux 上工作得非常好,但你在其他平台上可能会遇到问题。恕我直言,我听说有人在 Windows 有遇到问题。

不要在你打算发布给其他人的版本中启用这个功能,它引入了不必要的复杂性(你需要捆绑额外的文件),并有可能导致程序不能正常运行。尽可能只在开发过程中使用这个功能。

基于以上分析,可把这个功能作为 cargo 的一个命令行选项来指定,而不是把它放在 Cargo.toml 中,可能会更方便。只需像下面这样运行你的项目:

cargo run --features bevy/dynamic

追踪 Tracing

tracewgpu_trace 功能对于分析和诊断性能问题可能会很有用。

trace_chrometrace_tracy 功能用来选择你想用来可视化跟踪的后端。