基础
EntityArchetype-它是什么,为什么需要它。
EntityArchetype是ComponentType的唯一数组。EntityManager使用EntityArchetypes将使用相同ComponentTypes的所有实体分组到块中。(文档:那里)
由于本系列文章主要针对的是初学者,因此我不会讨论Chunks的想法。
开始时我们需要什么-初始化
就在我们创建实体之前,我们需要EntityArchetype-让我们来创建它们。
产生一些实体–最后…
但什么都没发生-让我们来看看系统
啊……。现在好多了,出事了。让我们伤害我们的实体,这样他们就能到达我们的天空。
好的,但是他们还活着。
我们有PostUpdateCommands,既然EntityManager管理实体,为什么不直接使用它呢?你还记得我们的第一部分说了什么吗?
但实际上,您并不想通过EntityManager添加/删除组件。您宁愿在更新之后执行此操作,以免破坏组(您将收到有关访问已释放的nativearray的错误),因此您希望使用PostUpdateCommands(EntityCommandBuffer)。
什么是EntityCommandBuffer?我们为什么需要它?
在那里的文档中有很好的解释
所有结构变化都有硬同步点。CreateEntity、Instantiate、Destroy、AddComponent、RemoveComponent、SetSharedComponentData都有硬同步点。例如,这意味着通过JobComponentSystem安排的所有作业都将在创建实体之前完成。这是自动发生的。因此,例如:在帧中间调用EntityManager.CreateEntity可能会导致等待World中所有先前计划的作业完成的大型停滞。有关在游戏过程中创建实体时避免同步点的详细信息,请参见EntityCommandBuffer。
有提到的JobComponentSystem,我还没有介绍,但别担心,它将在下一部分中介绍!EntityManager会使现有的、注入的数组和组件组无效,因此它会扰乱我们的更新。
与JobComponentSystems中的PostUpdateCommand(EntityCommandBuffer)不同,ComponentSystem中的PostUpdateCommand(EntityCommandBuffer)是自动设置并可用的。
此EntityCommandBuffer允许我们将要执行的更改排队,以便稍后在主线程中生效。
现在您肯定对使用ECS中的工作感兴趣了。关于这一点,我会写下一部分。