ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实体Entiites

2022-07-10 00:33:00  阅读:143  来源: 互联网

标签:EntityManager 创建 实体 Entiites 添加 组件 EntityArchetype


实体是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相同的世界里创建一个实体。

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

  • 用一个使用CompoentType(组件类型)对象数组的组件,来创建实体。
  • 用一个使用EntityArchetype的组件来创建实体
  • 通过实例化复制现有的实体,同时复制其当前的数据
  • 创建一个没有组件的实体,然后向其添加组件。(您可以立即添加组件,也可以在需要其他组件时添加组件)

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

  • 通过CreateEnity,来使用相同原型的新实体填充 NativeArray。
  • 通过实例化,复制现有的实体(包括其当前数据)来填充 NativeArray。

增加和删除组件

在创建实体后,你可以对其添加或删除组件。执行此操作时,受影响实体的原型将发生更改,并且 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有