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 运算必须在引擎的任务队列中依次完成,如果小型运算的前头有一些大型运算,则只有前边的完成,系统才能完成队列后方的运算。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一. 了解Node.js 1.1 Node.js 介绍 ​ Node.js是一个基于Chrome V8引擎的 Ja...
    小五同学H阅读 634评论 0 0
  • 前言 在公司的项目中,我们经常用到async await 这样的函数,它的作用也很奇特,可以让异步的函数等待异步执...
    hahajj_2e72阅读 468评论 0 0
  • 在此处先列下本篇文章的主要内容 简介 next方法的参数 for...of循环 Generator.prototy...
    醉生夢死阅读 1,463评论 3 8
  • 简介 Unity可寻址资源系统 可寻址资源系统提供了一种简单的方法通过“地址”加载资源。简化资源包的创建和部署的管...
    hh5460阅读 9,268评论 2 10
  • 发展历史 一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需...
    FlyElephant阅读 4,017评论 0 5