异步实例化预制体Object.InstantiateAsync配合Async/Await使用
Unity2022.3.20之后,可以使用异步克隆,正如前面一篇文章《Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync》说明的那样,常规的使用携程方式异步克隆,但如今await / async写法如此简单方便,肯定就不想放IEnumerator里头去实现了,怎么办呢?实现一个,代码如下:
public GameObject prefab; async void StartAsync() { GameObject instance = await InstantiateAsyncWithTask(prefab); Debug.Log("Prefab instantiated!"); } /// <summary> /// 异步实例化 /// </summary> /// <param name="prefab"></param> /// <returns></returns> public async Task<GameObject> InstantiateAsyncWithTask(GameObject prefab) { var request = Object.InstantiateAsync(prefab); // 等待实例化过程完成 while (!request.isDone) { await Task.Yield(); // 异步地等待下一帧 } // 返回实例化的游戏对象 return request.Result[0]; } /// <summary> /// 批量异步实例化 /// </summary> /// <param name="prefab"></param> /// <param name="count"></param> /// <returns></returns> public async Task<GameObject[]> InstantiateAsyncWithTaskMultiple(GameObject prefab, int count) { var request = Object.InstantiateAsync(prefab, count); // 等待实例化过程完成 while (!request.isDone) { await Task.Yield(); // 异步地等待下一帧 } // 返回实例化的游戏对象 return request.Result; }
如果用的是ET框架,把Task对应改写成ETTask方式即可。
异步克隆方法支持一次性克隆n个物体。