Latest commit d7a897d
Removal Detection
相关的官方文档:[removal_detection]
删除检测不同于变化检测。如果删除了数据,ECS 就不再拥有这些数据,也就不能继续追踪它们了。
但是删除检测对于某些应用程序很重要,因此 Bevy 提供了有限的形式。
组件
todo:看得不明不白、未测试,等 Bevy 改进吧。
#[derive(Component)] struct Seen; fn main() { App::new() .add_plugins(DefaultPlugins) // 把系统添加到 PreUpdate 阶段 .add_system_to_stage(CoreStage::PreUpdate, remove_components) // 用来检测的系统会在 PreUpdate 之后的阶段(Update)运行 .add_system(detect_removals) .run(); } fn removal_components( mut commands: Commands, q: Query<(Entity, &Transform), With<Seen>>, ) { for (e, transform) in q.iter() { if transform.translation.y < -10.0 { // 删除 Seen 组件 commands .entity(e) .remove::<Seen>(); } } } fn detect_removals ( removals: RemovedComponents<Seen>, // ...(todo:不懂)... ) { for entity in removals.iter() { // 做一些事 // 可以用 Commands::entity() 或 Query::get() } }
资源
略。Bevy 不提供?那就不看了。