阅读 106

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<GameObject>("myGameObjectKey");
    GameObject go = op.WaitForCompletion();

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

    Addressables.Release(op);
}

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

性能影响

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

以下特定情况会慢得多:

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

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

作者:大智_你的Unity探路者

原文链接:https://www.jianshu.com/p/0f97900d6e4a

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐