Unity DOTS中SystemBase的生命周期

跳转至专题目录

专题推荐文章:

  1. 温故知新——RectTransform成员属性的再认识
  2. unity Scene View扩展之编辑器扩展总结
  3. Unity获取鼠标点击ui GameObject

本系列目录

  1. JobSystem超进化!SystemBase!
  2. SystemBase的生命周期

 

一、生命周期流程图

二、OnCreate()

  1. 这个好理解,就是在SystemBase被创建时调用的
  2. 在子类重写该函数,初始话SystemBase所需要的资源
  3. 在第一次OnStartRunning()OnUpdate()前调用

 

三、OnStartRunning()

  1. 在系统被停止之后,第一次调用OnUpdate()之前调用,类似MonoBehaviour里面的OnEnable()
  2. 当SystemBase因为匹配不到所需EntityQuery而停止时,等到匹配到对应EntityQuery,则会在OnUpdate()前调用OnStartRunning()
  3. 当因开发人员手动设置系统的Enabled=false时,当Enabled恢复为true时,也会在OnUpdate()前调用OnStartRunning()

 

四、OnUpdate()

  1. 当SystemBase匹配到所需EntityQuery时,或SystemBase含[AlwaysUpdateSystem] attribute,或者SystemBase压根没有EntityQuery时,会在主线程里每帧调用
  2. 父System Group会在Update()中调用所有子系统的OnUpdate()
  3. Entities.ForEachJob.WithCode提供了便利的方式来定义Job,当然,也可以自己定义IJobChunk类来实例化、执行。你既可以选择在主线程执行,也可以选择在Work线程执行,也可以在多个线程执行
  4. 如果使用EntityManager里面的方法来修改Entity的结构(如增删IComponentData,或者直接删除了Entity),需要注意对后续SystemBase的更新相同Entity的影响(类似MonoBehaviour里面Destroy并不会立刻删,跟注意使用DestroyImmediate相似)[1]

 

五、OnStopRunning()

  1. 在SystemBase被停止之后调用(停止原因见三、OnStartRunning()),也会在SystemBase被删除时,OnDestroy()之前调用

 

六、OnDestroy()

  1. 当SystemBase被Destroy之后调用
  2. SystemBase被Destroy原因:
    1. 应用被关闭
    2. World被销毁
    3. 被开发人员调用DestroySystem(ComponentSystemBase)
    4. 编辑器模式模式下,还会在代码编译时退出

 

七、与生命周期息息相关的ShouldRunSystem()成员方法

  1. 返回SystemBase的entity queries是否匹配成功,用来决定是否需要跳过当前帧的OnUpdate()
  2. 当SystemBase有AlwaysUpdateSystemAttribute.时,也返回true

 

八、与生命周期息息相关的Enabled成员属性

  1. 用于OnUpdate()是否会被执行
  2. 当Enabled为false时,即使ShouldRunSystem()返回true,SystemBase也不会执行

 

参考

  1. ^Sync points https://docs.unity3d.com/Packages/com.unity.entities@0.14/manual/sync_points.html
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值