Unity ECS学习(4)

好让我们看看到底什么是烘焙吧

Baking概述

Baking是将场景中的GameObject数据转换变成EntityScene相关数据的过程。
Baking是不可逆的,将性能没有那么好的GamoObject,转化成Entity+Cpmponent的数据
目的是以最有效的方式表示应用程序中的数据,以避免处理任何不需要的数据。由于这种设计,它将创作和运行时数据分开。
Authoring data:创作数据,在你编辑的时候用到的数据,例如脚本、模型或任何其他与游戏相关的数据。
Runtime data:运行数据,在项目启动后使用的数据,这些针对性能和存储效率进行了优化:专为计算机处理而设计。

Baking阶段

烘焙分为四个阶段

  • EntityBake:烘焙生成Entity;
  • PreBakingSystemGroup:这个在烘焙Compnent之前执行
  • Baker:烘焙生成各个Entity下的Component;
  • BakingSystemGroup:通过System批量处理已经生成的Componet.
  • PostBakingSystemGroup:最后执行的BackingSystem.

因为baker本身是无序的,所以在baker时不能依赖其他baker生成的Component数据

bakingSystem

要说BakingSystem,首先要说System,System是ECS里的最后一个-处理逻辑

partial struct AddTagToRotationBakingSystem : ISystem
{
     public void OnUpdate(ref SystemState state)
     {
       
     }
}

System需要继承ISystem类,并且重写 OnUpdate方法
这个方法会自动每帧调用。

而bakingSystem则需要在类前添加声明

 [WorldSystemFilter(WorldSystemFilterFlags.BakingSystem)]
 partial struct AddTagToRotationBakingSystem : ISystem

这个声明会让这个System在baking时候调用。

public void OnUpdate(ref SystemState state)
{
	//获取到所有有RotationSpeedComponent并且没有AnotherTag的数据
    var queryMissingTag = SystemAPI.QueryBuilder()
        .WithAll<RotationSpeed>()
        .WithNone<AnotherTag>()
        .Build();
	//为这些数据添加AnotherTag Component
    state.EntityManager.AddComponent<AnotherTag>(queryMissingTag);

}

在baking过程中的 BakingSystemGroup 会调用对应system的OnUpdate,这个时候已经走了Baker的流程,我们可以取到对应的Component去进行修改添加等操作。

如果想要添加PostBakingSystemGroup的话
需要继承类ComponentSystemGroup

partial class AddTagToRotationBakingSystem :ComponentSystemGroup
{
    public void OnUpdate(ref SystemState state)
    {
      
    }
}

BakingScene

Baking是发生在subScene中的,是一个异步执行的过程,为了达成增量烘焙的条件,他设计了两个World

  • Conversion world 转换世界 实时根据场景中的修改进行烘焙
  • Shadow world 阴影世界 保存上一次的烘焙结果

这样可以通过比对两个world的不同处进行增量烘焙。

baking后面还有些内容,我们下次再聊

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值