组件是实体组件系统架构的三个主要元素之一。它们代表您的游戏或应用程序的数据。实体是索引您的组件集合的标识符,而 [系统] 提供行为。
ECS 中的组件是具有以下“标记接口”之一的结构:
- IComponentData — 用于通用和 [块组件]。
- IBufferElementData — 将 [动态缓冲区] 与实体相关联。
- ISharedComponentData — 按原型内的值对实体进行分类或分组。有关详细信息,请参阅 [共享组件数据]。
- 混合组件— 一种将 UnityEngine 组件添加到实体的方法。
- ISystemStateComponentData — 将特定于系统的状态与实体相关联,并检测何时创建或销毁单个实体。有关详细信息,请参阅系统状态组件。
- ISharedSystemStateComponentData — 共享和系统状态数据的组合。请参阅系统状态组件。
- Blob 资产– 虽然从技术上讲不是“组件”,但您可以使用 Blob 资产来存储数据。Blob 资产可以被一个或多个使用BlobAssetReference 的组件引用,并且是不可变的。您可以使用 Blob 资产在资产之间共享数据并在 C# 作业中访问该数据。
EntityManager 将组件的独特组合组织成原型。它将具有相同原型的所有实体的组件一起存储在称为块的内存块中。给定块中的实体都具有相同的组件原型。
此图说明 ECS 如何按原型存储组件数据块。共享组件和块组件是例外,因为 ECS 将它们存储在块之外。这些组件类型的单个实例适用于适用块中的所有实体。此外,您可以选择在块之外存储动态缓冲区。尽管 ECS 不会将这些类型的组件存储在块内,但在查询实体时,您通常可以将它们与其他组件类型相同。