ECS Componets类型可以划分为以下(按内存类型划分):
非托管Compnent和托管Compnent
非托管类型的Compnent存储blittable Types类型, 例如Bool,char,FixedString,FixedList.
托管Compnent:无法使用Job访问,也无法使用Burst编译,而且不会存储在chunk中,而是存储在大数组中,性能不如上者。
按照功能划分可以如下:
1.一般类型的Compnent:
2.Shared Compnent:消除实体之间的重复值,根据值的不同,将实体划分到不同的Chunk中,Shared components允许你的系统一起处理处理相似的entities。例如,Rendering.RenderMesh,定义在Hybrid.rendering包中的shared component,还包括mesh, material, receiveShadows等。
3.Tag Compnent: 标识实体,方便Job查找。
4.Enableable Compnent:运行时方便禁用/启用实体上的单个组件。
5.Cleanup Compnent:错误状态下,防止销毁实体。
6.Singleton Compnent:一个World下唯一存在的SingletonCompnent。
按照访问类型划分
1.按Entity访问:
2.按Chunk访问:
3.按Element访问:
按接口类型划分
==============================================================================================
System类别
ISystem:提供对非托管内存的访问。
SystemBase:用于访问存储托管数据。
补充知识:partial 关键字,可以将类或接口的声明分布在多个源文件中…
自定义System顺序调整(同一个Group下):
使用特性
[UpdateBefore]和[UpdateAfter]
如图:
指定System到特定的ComponentSysytemGroup下
使用特性:
[UpdateInGroup]:
补充知识:
==============================================================================================
遍历查询Entity数据的5种查询方式
1.SystemAPI.Query+ForEach
2.IJobEntity
3.IJobChunk
4.Entities.ForEach
5.Manually
SystemAPI.Query七种重载类型
1.IAspect
2.IComponentData
3.IShareComponetData
4.DynamicBuffer
5.RefRO
6.RefRW
如果要对游戏实体添加Tag标签,传统的OOD或者OOP思想应该添加一个枚举类型和变量,通过分支语句去判断,但是这样不符合面向数据的编程思想,在DOTS中应该使用Tag Component组件(不占内存空间),来达到划分Tag的目的