其他分享
首页 > 其他分享> > 实体Entiites

实体Entiites

作者:互联网

实体是ECS架构的三个主要元素之一。他们代表了你游戏或者应用中的单位个体。一个实体既没有行为也没有数据;相反,他确定了哪些数据是在一起的。而系统用于提供行为,组件用于存储数据。

实体本质上是一种ID。理解他的最简单的方法,是将其视为一个默认情况下连名字都没有的轻量级游戏对象。实体ID是稳定的;你可以用他们来存储其他的组件或是实体的引用。例如,层次结构中的子实体可能需要引用其父实体。

一个EntityManger管理所有在World中的实体。一个EntityManger维护实体的列表,并且组织与实体相关联的数据以获得最佳的性能。

尽管实体没有类型,但实体组可以按与其关联的数据组件的类型进行分类。在创建实体并向其中添加组件时,EntityManager 会跟踪现有实体上组件的独特组合。这种独特的组合被称为原型。实体管理器会在您向实体添加组件时创建EntityArchetype结构。您可以使用现有的EntityArchetype s 来创建符合该原型的新实体。当然,您也可以提前创建一个EntityArchetype,并使用它来创建实体。EntityArchetype``EntityArchetype

创建实体

最简单的创建实体的方式就是用Unity编辑器。你可以通过在运行时设置ECS,来将场景中和预制体的GameObject变为实体。对于您游戏或应用里的动态生产部分,你可以自己编写一个生成系统在job中创建大量实体。最后,你也可以使用EntityManager.CreateEntity函数来创建实体,但一次只能创建一个。使用 EntityManager 创建实体通常是效率最低的方法。

通过EntityManager创建实体

使用EntityManager.CreateEntity函数来创建实体,ECS会在与EntityManager相同的世界里创建一个实体。

你可以通过以下的方式逐个创建实体:

你也可以同时创建多个实体:

增加和删除组件

在创建实体后,你可以对其添加或删除组件。执行此操作时,受影响实体的原型将发生更改,并且 EntityManager 必须将更改的数据移动到新的内存块,并在原内存块中压缩组件数组。

对导致结构更改的实体的更改(即添加或删除SharedComponentData的组件,或是销毁实体的组件)无法在作业内部完成,因为这些更改可能会使作业正在处理的数据失效。相反,你可以通过向EntityCommandBuffer中添加指令,来产生这些类型的改变,以及在工作完成后执行在Buffer中的指令,

EntityManager 提供了许多函数,可以从单个实体或者 NativeArray 中的所有实体中删除组件。有关详细信息,请参阅有关组件的文档。

实体迭代

迭代所有具有一组匹配组件的实体是 ECS 架构的核心。请参阅 Accessing entity data

编辑器中的实体

在编辑器中,你可以在特定的Entities windows and Inspectors.窗口中看到以下图标表示实体:
image

标签:EntityManager,创建,实体,Entiites,添加,组件,EntityArchetype
来源: https://www.cnblogs.com/onehow/p/16462319.html