第3部分:Unity ECS-在实体上操作

63 篇文章 11 订阅

基础
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中的工作感兴趣了。关于这一点,我会写下一部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值