游戏引擎与 Bevy
引擎替你做了什么
一个游戏本质上是一个实时交互程序:它每秒要渲染几十帧画面,在每一帧里读取输入、推进游戏逻辑、计算运动与碰撞、播放声音、把画面交给显卡。如果不用引擎,这些都要你自己来——打开窗口并对接图形 API(Vulkan、DirectX、Metal)、解码图片字体和音频、维护主循环和时间步进、组织成千上万个游戏对象的数据和行为。
游戏引擎就是这套基础设施的集合,外加一种组织游戏代码的方式。前者决定你能不能少造轮子,后者决定项目长大之后还能不能维护。本书两者都讲,而且会花相当多的篇幅在后者——因为 Bevy 在“组织方式”上的选择,正是它最与众不同的地方。
Bevy 是什么
Bevy 是一个用 Rust 编写的免费开源游戏引擎,采用 MIT OR Apache-2.0 双许可证。它有几个鲜明的特点:
ECS 优先。 ECS(Entity Component System)不是 Bevy 的一个“功能”,而是整个引擎的地基:渲染、UI、音频、动画,引擎自身的每个部分都构建在同一套 ECS 之上,和你的游戏逻辑使用完全相同的机制。学会 ECS,你就同时学会了“使用 Bevy”和“读懂 Bevy”。下一节专门建立这个思维模型。
模块化。 Bevy 由 55 个子 crate 组成(bevy_ecs、bevy_render、bevy_ui……),你平时依赖的 bevy 主 crate 只是把它们组装起来的门面。这意味着它可以按需取用——比如只把 bevy_ecs 嵌进一个非游戏程序——也意味着引擎源码的组织非常清晰,便于查阅。
代码即配置。 Bevy 目前没有以图形编辑器为中心的工作流(官方编辑器仍在开发中),一切从 main.rs 开始。对习惯了 Unity、Godot 的人这是落差;对 Rust 程序员这往往是优点:没有藏在编辑器里的隐式状态,一切行为都能在代码里追溯。
跨平台。 桌面(Windows、macOS、Linux)、Web(WebAssembly)、移动端(Android、iOS)。渲染基于 wgpu,在每个平台自动选择合适的图形后端。
版本现状:先把丑话说在前面
Bevy 还年轻,大约每三到四个月发布一个 0.x 版本,每个版本都有破坏性变更(官方会随版本提供迁移指南)。这带来两个现实后果:
- 网上搜到的教程和 AI 生成的代码,很大概率对应旧版本 API,照抄会编译失败;
- 死记 API 的价值不高,会查官方示例和源码才是长期有效的能力。
本书的对策也有两个:全书严格锁定 Bevy 0.18.1,书中每段代码都在这个版本上编译验证过;同时从第一章起就教你查源码的习惯(见本章最后一节)。
Bevy 适合你吗
适合:你会 Rust,想做 2D/3D 游戏、可视化或仿真工具;你重视性能与并行;你愿意以代码为中心工作,并对“引擎内部如何运转”有好奇心。
暂时不适合:你需要成熟的图形编辑器工作流、游戏主机的官方支持、或庞大的商业资产商店——这些目前是 Unity、Unreal、Godot 的主场。
如果你属于前者,欢迎上车。