用途:在搭建新的 Bevy 应用或库插件时,确定系统应归属哪个调度阶段,编写需要 &mut World 的独占系统,并排查调度循环、歧义诊断或延迟命令顺序问题。
主要能力:给出通过 App::new().add_plugins(DefaultPlugins).add_plugins(GamePlugin).run() 装配应用的规范模式,以及在 Plugin::build 中插入资源、注册 Startup、Update、FixedUpdate、PostUpdate 系统的方式,并展示独占系统访问整个可变 World。
调度速查:Startup 用于一次性初始化;PreUpdate 用于读取输入、网络入口与帧起始记账;Update 用于每帧游戏逻辑,是游戏系统的默认选择;PostUpdate 用于 Update 之后的反向记账(如变换传播);Last 用于必须在 PostUpdate 之后运行的内容;FixedFirst/FixedPreUpdate/FixedUpdate/FixedPostUpdate/FixedLast 用于确定性、按 tick 速率的物理、网络模拟与游戏状态,每渲染帧运行零次或多次以追上 Time<Fixed>。经验法则是:同一输入在任何帧率下必须产生相同结果的系统放入 FixedUpdate,否则用 Update。
0.19 注意事项:SimpleExecutor 已被移除,剩余执行器依据依赖信息放置 ApplyDeferred,下游系统需在同一调度内看到命令时须添加 .before、.after 或 .chain();ScheduleBuildError 变体已重命名,HierarchyLoop 变为 HierarchySort(DiGraphToposortError::Loop(...)),DependencyCycle 变为 DependencySort(DiGraphToposortError::Cycle(...));执行器配置改为传入执行器值,将 set_executor_kind(ExecutorKind::SingleThreaded) 替换为 set_executor(SingleThreadedExecutor::new());资源在 0.19 中实现 Component;State::set() 现在总会触发状态转换,若需旧行为可用 next_state.set_if_neq(...);渲染世界的 pass 不应放在 Update,GPU pass 属于渲染调度。
限制:独占系统会阻塞其所在调度中的一切,仅在确实需要 &mut World 时使用(如场景加载、批量反射、模式迁移)。相关主题可查阅 bevy-ecs-systems、bevy-ecs-components、bevy-rendering、bevy-physics、bevy-input-actions、bevy-testing、bevy-migration-0-18-to-0-19。