Zack.Zhang Game Developer

Unity ECS 文档 —— IComponentData

2020-08-07
zack.zhang
   

语法

public interface IComponentData

附注

IComponentData的实现必须是一个结构体,并且仅能包含非托管、可位传输的数据类型,包括:

注意,你还可以在DynamicBuffer<T>中使用单独的IBufferElementData组件作为类数组的数据结构。

单个IComponentData实现应该只包含总是同时会被访问到的数据字段,或几乎总是同时会被访问到的数据字段。通常,使用更多的小组件类型,比使用更少、更大的组件类型更有效。

使用EntityManagerEntityCommandBuffer添加、设置和删除实体的组件。(当你持有一个对IComponentData结构的引用时,你也可以正常地更新它的字段)

IComponentData对象存储在chunks(ArchetypeChunk)中,并按实体索引。您可以实现System(ComponentSystemBase)来选择和遍历一组具有特定组件的实体。对于非基于Job的系统,可以使用ComponentSystem的EntityQueryBuilder。对基于Unity.Entities.IJobForEach`1和IJobChunk的系统,使用JobComponentSystem的EntityQuery。实体的所有组件大小必须适合一个单一的块,因此不能超过16 KB。(一些组件,如DynamicBuffer<T>和BlobArray<T>可以将数据存储在chunk之外,因此不能算在该限制范围内)

虽然添加到实体中的大多数组件都实现了IComponentData,但ECS还提供了几种特殊的组件类型。这些特殊的类型包括:

注意:块组件可以用来存储与块相关的数据(参见AddChunkComponentData<T>(Entity))和单例组件(只允许实例化一个该类型的实例,参见SetSingleton<T>(T)),使用IComponentData接口。

有关更多信息,请参见通用组件


评论

Content