Unity DOTS技术(十一) SystemBase详解


一.什么是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
在这里插入图片描述

  • 26
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值