Component的理解
文章目录
- Component的理解
- 前言
- 一、托管Component与非托管Component
- 1.非托管Component
- 2.托管Component
- 二、各功能的Component
- 三、在Editor中的Component的区分
- 总结
前言
Component作为ECS中承载数据的结构,了解他相关内容是非常必要的,面向数据的设计,就是要设计好Component。
提示:以下是本篇文章正文内容,下面案例可供参考
一、托管Component与非托管Component
1.非托管Component
Struct类型,继承于IComponentData。只能存放类似于BlittableTypes的数据(固定大小与,长度,不变的数据结构等特征)。可以用Brust编译优化。
可以存放的类型:Blittable types;bool;char;BlobAssetReference;Colletions.FixedString;Collections.FixedList;Fixed Arrary;其他由这些组合成的Struct。
2.托管Component
Class类型,继承于IComponentData。可以存储任何类型,但是使用其他托管类型数据,需要实现比较、序列化等接口,也要进行垃圾回收(因为要在ECS中进行管理),无法用JOBS访问,无法Brust编译优化。
原理:在对应的Entity中的Chunk结构数据中,只存储应用托管对象的引用。所以查询这些实际数据并不高效。
二、各功能的Component
- 一般Component:
- Shared Component:用于消除相同数据
- Tag Component:用于标记的
- Enableable Component:启用禁用组件
- Cleanup Component:防止销毁Entity组件
- Singleton Component:唯一存在的组件
三、在Editor中的Component的区分
大致分为5种:DATA,Buffer,Tag,Shared,Data Managed。
总结
Unity中提供了各种类型的Component来让玩家继承使用。其目的主要就是用来提升查询效率,高效地组织数据。看文档里面也是各种各样的,看起来头疼,还是在后面的使用中慢慢一个个认识他们吧