当一个实体被删除时,会有以下几步操作

  • 查找引用该实体的所有组件
  • 删除这些组件
  • 回收实体的 ID 以供重新使用

但当存在 State 组件时,实体不会被删除,只会删除除了 State 组件以外的组件
当配合使用 StateComponentData 与 ComponentData 时可以实现观察实体当前的状态

Tag(ComponentData)State(StateComponentData)
Tag 存在,State 缺失实体刚被创建,未被初始化
Tag 存在,State 存在实体已被初始化,可以使用
Tag 存在,State 存在实体处于删除状态

例如:

Entities
    .WithAll<Tag>()
    .WithNone<State>()
    .WithStructuralChanges()
    .ForEach((Entity entity) =>{
        // Spawn
}).Run();

Entities
    .WithAll<Tag>()
    .WithAll<State>()
    .ForEach((Entity entity) =>{
        // Update
}).Run();

Entities
    .WithNone<Tag>()
    .WithAll<State>()
    .ForEach((Entity entity) =>{
        // Destroy
}).Run();