文章目录
- 一.什么是SystemBase
- 二.SystemBase的生命周期
- 三.继承实现
- 四.操控的依据
- 五.组件筛选的限制
- 六.组件监听
- 七.共享组件筛选
- 八.存储筛选结果
- 九.过滤标识组件
- 十.线程操作
- 十一.线程名称修改
- 十二.Burst编译器开关
一.什么是SystemBase
在之前的分享中我们用到的系统父类有ComponentSystem主要操控主线程的,JobCoponentSystem主要操作多线程的.
而SystemBase则可以兼容以上两者,操控主线程及多线程.
二.SystemBase的生命周期
从以下代码可以看出生命周期为
OnCreate > OnStartRuning > OnUpdate > OnStopRunning > OnDestroy
三.继承实现
继承SystemBase必须实现OnUpdate接口
否则将会有如下报错
四.操控的依据
使用SystemBase时,系统基类中包含了World和EntityManager组件,对此可以对组件进行操控.
1.使用World,EntityManager进行操控,在SystemBase的基类中有包含World 和 EntityManager
2.用System自带方法
3.通过System成员变量方位Entities
当系统中使用ref和in时,需要将ref放在前面
五.组件筛选的限制
在使用Foreach时会可以使用WithAll WithAny WithNoe对筛选的结果进行操作
1.如图WithAll即可筛选出同时包含PrintComponentData1 和 RotationEulerXYZ 的实体.
2.WithAny 包含 组件中的其中一个则会被筛选出来
3.WithNone 会筛选出不包含组件的实体
六.组件监听
监听组件值修改时触发
我们分发现报错
当使用监听时我们需要在此对类型进行声明
七.共享组件筛选
筛选共享组件,需要注意的是如下图,只会筛选出值为5的共享组件
八.存储筛选结果
将筛选出的结果存到EntityQuery中,下面我们还装EntityQuery转换NativeArray并循环打印
九.过滤标识组件
WithEntityQueryOptions可以过滤组件
1.过滤包含WriteGroup标识的组件
以下是WriteGroup的用法
2.过滤包含Disable的组件
3.过滤包含Prefab的组件
十.线程操作
1.Run()代表程序只在主线程上单线程运行
2.Schedule开多一个线程运行
3.开启多线程操作
十一.线程名称修改
使用WithName修改线程名称
十二.Burst编译器开关
4.使用编译器WithBurst 或 WithoutBurst关闭Burst编译器
注意的是需要在菜单栏中Jobs > Burst > Enable Compilation 勾选开启Burst