本技能面向 Bevy 0.19 的 ECS 系统编写,覆盖系统参数、系统集合与运行条件三大主题。
用途:当需要把相关状态合并为单个系统参数、将系统分组以便整体排序、用运行条件控制执行、挂钩状态切换、或在运行时热移除系统(例如拆除调试浮层)时使用。
主要能力:通过 #[derive(SystemParam)] 定义复合参数,包含 'w(world 借用)与 's(系统本地状态借用)生命周期;通过 #[derive(SystemSet)] 与 configure_sets、.chain() 组织并排序系统;使用内置运行条件 on_message::<M>、resource_exists::<R>、resource_changed::<R>、in_state(MyState::X)、state_changed::<MyState>、any_with_component::<C>,并用 .and()/.or()/not() 组合;状态过渡可用 OnEnter(S)、OnExit(S)、OnTransition、NextState<S>、set_if_neq;运行时用 remove_systems_in_set 移除系统。
用法要点:注册消息用 app.add_message::<M>(),读取用 MessageReader、写入用 MessageWriter(0.17 起由 EventReader/EventWriter 更名而来);排序依赖行为应显式添加 .before、.after 或 .chain();条件可按需组合,如 run_if(in_state(GameState::Playing).and(resource_exists::<NetSession>()))。
限制与注意:共享访问不定义顺序,存在可变冲突的系统会被串行化但相对顺序未指定,需开启歧义诊断;0.18 起 next_state.set(S) 总会触发 OnExit/OnEnter,需旧行为应改用 set_if_neq;不要通过 Schedules 移除正在运行的调度,应改在后续或不同调度(如 Last)中移除 Update 系统;0.19 中 Resource: Component,T: Resource 约束不再保证 T 不会出现在组件查询中。
官方文档与更细的参考文件内容暂未提供。