Unity ECS学习 (3)

现在让我们看看Component是怎么挂载到Entity上的

Baker

Component的挂载是在烘焙的时候完成的。

首先默认组件,比如Mesh这些,Unity已经写好了对应的烘焙方法,这些不用我们去考虑。我们要考虑的是我们自己写的那些,比如

public class MoveComponentAuthoring : MonoBehaviour
{
    public float speed;
}

我们想把这个里面的数据生成一个Component挂载到他的Entity上,那么我们需要新建一个类并且让它继承Baker类,并且重载Bake方法。这个方法会在全量烘焙和修改后的增量烘焙的时候调用。

public class MoveComponentBaker : Baker<MoveComponentAuthoring>
{
    public override void Bake(MoveComponentAuthoring authoring)
    {
        var enitity = this.GetEntity(TransformUsageFlags.Dynamic);
        var data = new MoveComponent
        {
            Speed = authoring.speed,
        };
        AddComponent(enitity,data);
    }
}

首先Bake里面传进来的参数,就是上面的 MoveComponentAuthoring对象,
然后
var enitity = this.GetEntity(TransformUsageFlags.Dynamic);
这个获取到对应的Entity.
最后创建一个 MoveComponent对象,并且加到刚获取到的entity上。
var data = new MoveComponent
{
Speed = authoring.speed,
};
AddComponent(enitity,data);
这样我们就把一个MoveComponent的Component,挂载到了对应的entity上了。

Backer的运行逻辑

上面我们提到了两个名词,全量烘焙和增量烘焙。
那什么时候触发全量烘焙什么时候触发增量呢,烘焙的流程又是个啥呢?

烘焙是将 Unity 编辑器中的gameGameObject转换Entity的过程。

全量烘焙是把这个场景中的所有gameGameObject转换Entity
而增量则是只烘焙修改过的
触发条件
全量:

  • Entity的场景已经丢失
  • subScene单独打开修改,再回到主场景的时候
  • Component属性修改
  • Backer逻辑修改
  • 重新导入 (在subScene 上的Reimport)
  • 清除缓存 (Preferences->Entites->Clear Entity Cache)

增量:
当sunScene加载创作场景时,它还会初始化增量烘焙。在场景上执行增量烘焙传递意味着您可以在编辑创作场景时直接看到烘焙结果。

在增量烘焙期间,烘焙在内存中进行,而不是对磁盘执行运行。更改GameObject时,Unity 仅重新烘焙受影响的实体和组件。仅烘焙一小部分数据的速度要快得多,这意味着 ECS 数据可以实时更新。

先到这吧,下次我们接着说烘培的弯弯绕绕。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值