ECS框架文档翻译三 Components

以下文档均来源于ECS官网:

https://docs.unity3d.com/Packages/[email protected]/manual/ecs_entities.html

Components

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

具体地说,ECS中的组件是实现了下列“标记接口”之一的结构体:

  • IComponentData
  • ISharedComponentData
  • ISystemStateComponentData
  • ISharedSystemStateComponentData

EntityManager将实体上出现的组件的唯一组合,组织到Archetypes(组件原型)中。对于具有相同原型的所有实体,它们的组件被一起存储在被称为Chunk的内存块中。给定Chunk中的所有实体都具有相同的组件原型。

共享组件(ISharedComponentData)是一种特殊的数据组件,您可以使用它来根据共享组件中的具体值来细分实体(它们的原型除外)。当你将共享组件添加到实体时,EntityManager将具有相同共享数据值的所有实体放入同一个Chunk中。共享组件允许您的系统一起处理相似的实体。例如,共享组件Rendering.RenderMesh(Hybrid.rendering包的一部分),它定义了几个字段,包括meshmaterialreceiveShadows等。渲染时,处理这类的3D对象是最有效的,因为它们这些字段的值都相同{译者注:系统可以启用GPUInstancing批处理}。由于这些属性是在共享组件中指定的,因此EntityManager将相匹配的实体放在同一块内存中,以便渲染系统可以有效地遍历它们。

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

每当你从实体添加或删除共享组件,或更改共享组件的中字段的值,EntityManager都会移动实体到其他Chunk,必要时还会创建新Chunk。

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

你可能感兴趣的:(Unity中的ECS编程)