【UnityDOTS 小知识】如何异步利用Prefab实例化为一个Entity

如何异步利用Prefab实例化为一个Entity

前言

一般Prefab实例化为一个Entity的方式为利用在subScene中的Monobehaviour脚本的显示引用,再利用baker的方式,直接获取一个对应的Entity的原型。然后再用Inistacne接口,针对这个原型来实例化对应的Entity。Unity还提供了一种异步化的方式,通过prefab实例化Entity。

一、EntityPrefabReference与RequestEntityPrefabLoaded

EntityPrefabReference是一种对Entity上的Prefab的弱引用对象。利用这个对象,我们可以不拿到Prefab bake出来的Entity来获取Prefab与Entity这种关系。

RequestEntityPrefabLoaded通过名字上就可以知道,他是一种预加载Prefab的一种请求组件。查看文档可知,它请求的预加载Prefab,就是通过EntityPrefabReference引用的。

public struct RequestEntityPrefabLoaded : IComponentData, IQueryTypeParameter
  {
    public EntityPrefabReference Prefab;
  }

二、异步步骤

1.实例化一个EntityPrefabReference 对象

直接通过new 一个EntityPrefabReference对象,然后传入Prefab对象的GameObject对象即可得到一个实例化的EntityPrefabReference 对象。

2.添加RequestEntityPrefabLoaded组件

给你想要获取对应Prefab原型的Entity上添加RequestEntityPrefabLoaded组件,组件成员变量Prefab赋值为上面构造好的EntityPrefabReference。

3.查询PrefabLoadResult组件

在上面添加了RequestEntityPrefabLoaded的Entity上,通过Update去轮询查看这个Entity上是否已经填加了PrefabLoadResult组件(通过HasComponent方法)。
一旦添加了这个组件,意味着异步的Prefab对应的Entity原型已经加载好了。通过PrefabLoadResult组件的data.PrefabRoot就可以获取到。然后再根据需求,利用Instantiate接口去实例化这个Entity原型即可(这一点跟之前一样)。

总结

利用RequestEntityPrefabLoaded组件,以及PrefabLoadResult组件,可以以异步的方式来获取对应Prefab的Entity原型。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity是一款游戏开发引擎,通过它可以实现游戏中的各种功能。PrefabUnity中非常重要的概念,它是一种预制物体,可以理解为游戏对象的模板。 在Unity中,可以通过以下几个步骤来实例化一个Prefab。 首先,我们需要在Unity中创建一个Prefab。可以通过将一个游戏对象拖放到Hierarchy面板的Assets文件夹中实现。 接下来,在脚本中使用Instantiate函数来实例化Prefab。Instantiate函数需要两个参数,第一个参数是要实例化的Prefab本身,第二个参数是实例化之后的游戏对象的位置和旋转信息。例如: ```c# public GameObject prefab; // 声明一个游戏对象 void Start() { // 使用Instantiate函数来实例化Prefab GameObject instance = Instantiate(prefab, transform.position, transform.rotation); // 使用instance进行其他操作,比如设置属性、添加组件等 } ``` 在脚本中,我们可以使用声明的GameObject变量来实例化Prefab。在Instantiate函数中,我们传入了位置信息transform.position和旋转信息transform.rotation,这样实例化之后的游戏对象会与父游戏对象具有相同的位置和旋转。 实例化之后,我们可以使用新实例得到的游戏对象进行一些操作,比如设置属性、添加组件等,可以根据游戏需求自由发挥。 以上就是使用Unity从Prefab实例化一个GameObject的方法,通过这种方式可以方便地在游戏中创建多个相同的游戏对象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值