组件

组件是实体组件系统体系结构的三个主要元素之一。它们代表您的游戏或程序的数据。实体本质上是标识符,用于索引组件集合。系统提供行为。

具体地说,ECS中的组件是具有以下“标记接口”之一的结构:

IComponentData
ISharedComponentData
ISystemStateComponentData
ISharedSystemStateComponentData
EntityManager将实体上出现的组件的唯一组合组织到Archetypes中。它将具有相同原型的所有实体的组件一起存储在名为Chunks的内存块中。给定Chunk中的实体都具有相同的组件原型。

共享组件是一种特殊的数据组件,您可以使用它来根据共享组件中的特定值(除了它们的原型之外)细分实体。将共享组件添加到实体时,EntityManager将具有相同共享数据值的所有实体放入同一块中。共享组件允许您的系统一起处理类似的实体。例如,共享组件Rendering.RenderMesh是Hybrid.rendering包的一部分,它定义了几个字段,包括mesh,material,receiveShadows等。渲染时,最有效的是处理所有具有相同值的3D对象。由于这些属性是在共享组件中指定的,因此EntityManager将匹配的实体放在内存中,以便呈现系统可以有效地迭代它们。

注意:过度使用共享组件会导致较差的块利用率,因为它涉及基于原型和每个共享组件字段的每个唯一值组合扩展所需的内存块数。避免向共享组件添加不必要的字段,使用Entity Debugger查看当前的Chunk利用率。

如果从实体添加或删除组件,或更改SharedComponent的值,EntityManager会将实体移动到其他Chunk,必要时创建新Chunk。

系统状态组件的行为类似于普通组件或共享组件,但在销毁实体时,EntityManager不会删除任何系统状态组件,也不会在删除实体ID之前回收它们。这种行为差异允许系统在销毁实体时清理其内部状态或释放资源。

隐藏边栏