前言

不知不觉,Bevy 已经迎来了五周年生日, 写一篇文章回顾一下我与Bevy的缘分.

开始于2020年

遥想2020年, 当时公司业务正在做模拟训练业务. 在后端我已经在使用actix-web提供websocket服务给前端网页, 随着业务复杂性的增加,我发现 Actix 的 Actor 模型在处理需要多方协作的复杂逻辑时,状态管理和业务编排变得愈发困难.

作为前游戏行业开发者, 一直关注着rust游戏开发. 2020年中还在关注着amethyst, 对ECS模式十分感兴趣, 但amethyst上手实在不好用, 写着写着就搁置了下来. 八月初, 手机消息推送了Bevy 0.1发布的新闻, 其中宣称Bevy ECS是最符合人体工程学设计的ECS , 这一下子吸引了我.

当年的ECS写法

use bevy::prelude::*;
 
struct Velocity(f32);
struct Position(f32);
 
// this system spawns entities with the Position and Velocity components
fn setup(mut commands: Commands) {
    commands
        .spawn((Position(0.0), Velocity(1.0),))
        .spawn((Position(1.0), Velocity(2.0),));
}
 
// this system runs on each entity with a Position and Velocity component
fn movement(mut position: Mut<Position>, velocity: &Velocity) {
    position.0 += velocity.0;
}
 
// the app entry point. hopefully you recognize it from the examples above!
fn main() {
    App::build()
        .add_default_plugins()
        .add_startup_system(setup.system())
        .add_system(movement.system())
        .run();
}

很简洁明了, 而且我只需要ECS写逻辑, 不需要渲染画面. 而Bevy模块化的架构设计, 可以很容易剥离掉渲染模块. 于是,我很快就在公司的项目中引入了 Bevy ECS,并提交了第一行用 Bevy 编写的业务逻辑代码.

第一次提交

公司业务(2020-2023)

这几年公司业务有模拟打靶, 驾驶训练等, 和游戏逻辑很接近, 所以我一人用bevy ecs写了很多逻辑代码, 其中最复杂的一个业务, 有点往 Command: Modern Operations 的模拟方向发展, 可惜后面停了. 这些代码部署在 Windows 和树莓派(Raspbian)环境下,表现出色,运行一直非常稳定.

随着业务的稳定, 我同时也开源了一些Bevy插件:

尝试游戏(2024-至今)

随着公司业务转型, 用ECS写逻辑的地方少了很多. 我在业余时间也开始了Bevy游戏的开发.

下面是完成的一些作品

image.png

后记

ECS

Bevy ecs的人体工程学一直在改进, 越用越好用. 在0.16版本以前加入缺少的Relation关系, 但 ECS 最大的问题是新手需要一个思路转换的过程, 从传统的面向对象思维(OOP)转向面向数据的设计(DOD),以及从直接的函数调用转向基于事件和查询的松耦合系统交互.

好处是ecs的组合性很强, 业务中的抽象出的插件真的可以很容易在其他项目里复用.

编辑器/调试

2025年五周年了, Bevy 经常被问的编辑器还没有实现~, 平常游戏类型用bevy_egui调试就够了.

界面调试慢? 即将发布的0.17即将支持代码热重载, 0.18 将推出实现性的bsn支持来界面热重载.

开发环境搭建慢? bevy_cli 启动!

bevy new my_game --template 2d

生产力

24年steam上线了 林间小世界(Tiny Glade) , 它使用了Bevy ECS, 但自己写了渲染管道

image.png

25年6月有LongStory 2, Bevy实现 Inky 脚本语言可视化小说 image.png

25年第四季度还有 Exofactory image.png

对游戏没有兴趣? nominal 在用bevy做硬件调试平台 image.png

可以关注下面列表看哪些bevy应用已经正式发布 https://github.com/Vrixyz/bevy_awesome_prod/

Let’s Bevy!