美文网首页Unity探路营
Addressable同步加载它终于来了!

Addressable同步加载它终于来了!

作者: 洪智 | 来源:发表于2021-05-16 16:33 被阅读0次

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

    从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<GameObject>("myGameObjectKey");
        GameObject go = op.WaitForCompletion();
    
        //Do work...(运行……)
    
        Addressables.Release(op);
    }
    

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

    性能影响

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

    以下特定情况会慢得多:

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

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

    相关文章

      网友评论

        本文标题:Addressable同步加载它终于来了!

        本文链接:https://www.haomeiwen.com/subject/chuqjltx.html