Unity ECS Manual [17]

63 篇文章 11 订阅

Job dependencies

  Unity根据系统读取和写入的ECS组件来分析每个系统的数据依赖性。如果一个在框架中较早更新的系统读取了后来的系统所写的数据,或者写了后来的系统所读的数据,那么第二个系统就会依赖第一个系统。为了防止竞争条件,作业调度器在运行一个系统的作业之前,要确保该系统所依赖的所有作业已经完成。

  一个系统的Dependency属性是一个JobHandle,代表了该系统的ECS相关依赖关系。在OnUpdate()之前,Dependency属性反映了系统对先前作业的传入依赖关系。默认情况下,当你在系统中安排作业时,系统会根据每个作业读取和写入的组件来更新Dependency属性。

  要覆盖这个默认行为,请使用Entities.ForEach和Job.WithCode的重载版本,它将作业的依赖性作为参数,并将更新的依赖性作为JobHandle返回。当你使用这些结构的显式版本时,ECS不会自动将作业句柄与系统的依赖性属性结合起来。当需要时,你必须手动组合它们。

  请注意,系统的Dependency属性并不跟踪一个作业可能对通过NativeArrays或其他类似容器传递的数据的依赖性。如果你在一个作业中写一个NativeArray,并在另一个作业中读取该数组,你必须手动添加第一个作业的JobHandle作为第二个作业的依赖(通常使用JobHandle.CombineDependencies)。

  当你调用Entities.ForEach.Run()时,工作调度器会在开始ForEach迭代之前完成所有系统所依赖的预定工作。如果你也使用WithStructuralChanges()作为构造的一部分,那么作业调度器就会完成所有正在运行和预定的作业。结构变化也会使任何对组件数据的直接引用失效。更多信息请参见同步点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值