Addressable同步加载它终于来了!

本文首发公众号洪流学堂。洪流学堂,让你快人几步。

从Addressables 1.17.4-preview版本开始,加入了一个新的API,叫做WaitForCompletion()可以用于将异步操作变为同步操作。

支持的Unity版本为:Unity 2019 LTS、Unity 2020 LTS和Unity 2021.1

之前版本的Addressables中,要么全部异步操作,要么全部同步操作,非常不便。现在这个问题解决了。

具体代码如何写呢:

void Start()
{
    //同步加载一个GameObject
    var op = Addressables.LoadAssetAsync("myGameObjectKey");
    GameObject go = op.WaitForCompletion();

    //Do work...(运行……)

    Addressables.Release(op);
}

这里面要注意的是,不管是同步操作还是异步,最后都得将操作给释放。Addressables.Release(op);

性能影响

咋大部分情况下,同步加载的性能应该和异步加载差不多,偶尔会出现更快或者更慢的情况。

以下特定情况会慢得多:

第一种是 Addressables 运行涉及大量引擎调用时,常出现在一次加载大量资源或体积庞大、依赖繁多的资源时。速度慢的原因是 Unity 2021.1 在以同步方式运行异步引擎接口时会在每次调用时短暂停顿一下。这种停顿现象已在 2021.2 中移除,引擎目前处于 alpha 测试。

第二种是当 WaitForCompletion 在后台处理大型运算时,再调用其处理小型运算。WaitForCompletion 运算必须在引擎的任务队列中依次完成,如果小型运算的前头有一些大型运算,则只有前边的完成,系统才能完成队列后方的运算。

你可能感兴趣的:(Addressable同步加载它终于来了!)