( EntityCommandBuffer 以下简称 ECB)

ECB 主要解决了两个问题

  • 第一个问题,在使用 Schedule 和 ScheduleParallel 操作使用 Job 时,是无法直接使用 EntityManager 的
  • 第二个问题,在进行结构化改变时,需要等待所有 Job 完成后在同步点进行操作

结构化改变包括

  • 创建实体
  • 删除实体
  • 向实体中添加组件
  • 从实体中删除组件
  • 修改共享组件的值

同步点

  • 在同步点进行的操作,会导致 Job 无法工作,所以应该尽量减少结构化改变的操作
  • 使用 ECB 可以将分散的结构化改变操作同步在同一个同步点内

当我们在使用 Job 时,为了防止多线程运行时对同一个实体进行了冲突的操作时,同步点的存在是必要的
例如:当线程 A 对实体 a1 的组件进行了删除操作,线程 B 又去获取实体 a1 被删除的组件时,就会发生错误
所以当我们使用了 Job 的多线程时,需要使用 ECB 来延迟结构化改变操作,统一到同步点内再进行操作