Latest commit d7a897d
命令
相关的官方文档:[ecs_guide]
Comands 的作用:
- 生成或销毁实体
- 给实体添加或移除组件
- 管理资源
Command 不是立即生效,而是排队等待,在安全时执行。查看 [Stage]。(如果不用 Stage,系统会在[下一帧更新]时看到它们。)
#![allow(unused)] fn main() { fn spawn_player(mut commands: Commands) { // 管理资源 commands.insert_resource(GoalsReached { main_goal: false, bonus: false, }); commands.remove_resource::<MyResource>(); // 用 spawn 生成新的实体 let entity_id = commands .spawn() // 添加组件 .insert(ComponentA) // 添加Bundle .insert_bundle(MyBundle::default()) // 获取实体的 ID .id(); // 用 Bundle 创建实体 commands.spawn_bundle(PlayerBundle { name: PlayerName("Henry".into()), xp: PlayerXp(1000), health: Health { hp: 100.0, extra: 20.0, }, _p: Player, sprite: Default::default(), }); // 生成另一个实体 // 注意:组件组合成元组就变成了 Bundle let other = commands .spawn_bundle(( ComponentA::default(), ComponentB::default(), ComponentC::default(), )) .id(); // 给实体添加或移除组件 commands .entity(entity_id) .insert(ComponentB) .remove::<ComponentA>() .remove_bundle::<MyBundle>(); // 销毁实体 commands.entity(other).despawn(); } fn make_all_players_hostile(mut commands: Commands, query: Query<Entity, With<Player>>) { for entity in query.iter() { // 给实体添加一个 Enemy 组件 commands.entity(entity).insert(Enemy); } } }
注意不要混淆 Component 和 Bundle。例如:
.insert_bundle 与 Bundle 组合使用,会正确地从 Bundle 中添加所有组件;.insert 和 Bundle 组合使用,只会把 Bundle 作为单个组件添加。