Bevy ECS 架构指南
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装规范名 @user_3c6cb52e/bevy-ecs-sh-sw1mc7。
技能介绍
当 Bevy 开始报 "conflicting accesses"
Bevy 的 API 每个 minor 版本都会变动,0.16 这轮尤其狠:delta_seconds() 改名 delta_secs(),Camera2dBundle、SpriteBundle 等 bundle 被移除,旧博客和示例代码往往直接编译失败。更麻烦的是运行时 panic——两个系统同时写同一组件触发借用冲突,或角色移动速度跟着帧率漂移,问题常在渲染管线深处才暴露。
这个技能把关注点收敛到 ECS 核心:
- 版本锚定:
Cargo.toml锁定bevy = "0.16",以对应版本文档为准,不混用跨版本片段 - 数据建模:
#[derive(Component)]描述实体数据,#[derive(Resource)]描述全局唯一数据(分数、设置、Time时钟) - 系统即普通函数:参数声明数据访问——
Query读实体、Res/ResMut读写资源、Commands做延迟生成/销毁;访问不冲突时系统自动并行 - 时间驱动:位移一律乘
time.delta_secs(),杜绝帧率依赖 - 显式排序:仅对真正有依赖的系统用
.chain()或显式约束,分支交给run_if,相关装配收拢进Plugin
适用边界
它只覆盖 ECS 核心层。深度渲染、自定义 shader/pipeline、UI 布局、音频需另行处理。若算法本身引擎无关(如寻路、程序化生成),可搭配 game-ai 或 procedural-gen 技能使用。
使用场景
- 刚锁定 bevy = "0.16" 后写游戏代码,需要搭 App 入口、注册 DefaultPlugins 与系统时
- 角色移动速度随帧率波动,需要用 time.delta_secs() 改成帧率无关更新时
- 两个系统同时读写同一组件触发借用冲突 panic,需要用 With/Without 或 ParamSet 拆分时
- 从 0.15 升级到 0.16 后找不到 Camera2dBundle,需要改为直接生成 Camera2d/Sprite/Transform 组件时
适合人员
- 使用 Rust 和 Bevy 0.16 开发游戏、正在搭 ECS 架构的独立开发者,想分清组件、资源、系统的边界
- 从 Bevy 0.15 升级到 0.16 被 bundle 移除和 API 改名卡住的开发者,需要确认新写法
- 在 Bevy 里写系统时遇到借用冲突 panic 或帧率依赖移动问题、想定位 ECS 访问模式错误的工程师