Unity ECS Manual [1]

63 篇文章 11 订阅

Entities

  实体是ECS体系结构的三个主要元素之一。它们代表游戏或应用程序中的个体“事物”。实体既没有行为也没有数据;相反,它标识哪些数据片段属于一起。System提供行为,Component存储数据。

  实体本质上是一个ID,最简单的方式就是把它看作一个轻量级的游戏对象,默认情况下它甚至没有名字。实体ID是稳定的;您可以使用它们来存储对另一个组件或实体的引用。例如,层次结构中的子实体可能需要引用其父实体。

  EntityManager管理World中的所有实体。EntityManager维护实体列表,并组织与实体关联的数据以实现最佳性能。

  尽管实体没有类型,但实体组可以按与其关联的数据组件的类型进行分类。当您创建实体并向其添加组件时,EntityManager会跟踪现有实体上组件的唯一组合。这种独特的组合被称为原型 Archetype。当您向实体添加组件时,EntityManager会创建EntityArchetype结构。可以使用现有的EntityArchetypes创建符合该原型的新实体。您还可以预先创建EntityArchetype并使用它来创建实体。

创建实体

  创建实体的最简单方法是在Unity编辑器中。你可以设置ECS在运行时将放置在场景中的GameObjects和Prefabs都转换为实体。对于你的游戏或应用程序的更多动态部分,你可以创建Spawn系统,在一个Job中创建多个实体。最后,你可以使用EntityManager.CreateEntity函数中的一个来创建实体。用EntityManager创建实体通常是效率最低的方法。

使用EntityManager创建实体

  使用EntityManager.CreateEntity函数之一创建实体。ECS在与EntityManager相同的World中创建实体。
  可以通过以下方式逐个创建实体:

  • 使用ComponentType对象数组的组件创建实体。
  • 使用EntityArchetype的构件创建实体。
  • 用Instantiate复制一个现有的实体,包括其当前的数据。
  • 创建一个不带零部件的实体,然后向其添加零部件。(您可以立即添加组件,也可以在需要其他组件时添加。)

  您还可以一次创建多个实体:

  • 使用CreateEntity用具有相同原型的新实体填充NativeArray。
  • 使用Instantiate将现有实体的副本填充到NativeArray中,包括其当前数据。

添加和删除组件

  在一个实体被创建后,你可以添加或删除Component。当你这样做时,受影响的实体的原型会发生变化,EntityManager必须将改变后的数据移到新的内存块中,并在原来的块中压缩组件数组。

  对实体的改变会导致结构上的变化–即添加或删除改变SharedComponentData值的组件,以及销毁实体–不能在Job中进行,因为这些会使Job正在处理的数据失效。取而代之的是,你将进行这些类型的更改的命令添加到一个EntityCommandBuffer中,并在Job完成后执行这个命令缓冲区。

  EntityManager提供了从单个实体以及NativeArray中的所有实体删除组件的功能。有关详细信息,请参阅有关组件的文档。

迭代实体

  遍历所有具有匹配组件集的实体,是ECS架构的核心。参见访问实体数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值