ue3dUnity与Addressable资源系统同步加载资源

Unity与Addressable资源系统同步加载资源

分类:
ue3d - Unity与Addressable资源系统同步加载资源

本文介绍如何使用Unity的Addressbles资产系统同步加载资源。

同步加载?

Addressable资源系统使用异步API来加载资源。

var handle = Addressables.LoadAssetAsync<GameObject>("FooPrefab");
await handle.Task;
var prefab = handle.Result;

Addressables.Release(handle);

现在考虑同步加载该资源,如果Task可以如下所示使用Wait()那就太好了,但Addressable不支持它。

// 如果你这样做,Unity就会更加坚定*
var handle = Addressables.LoadAssetAsync<GameObject>("FooPrefab");
handle.Task.Wait();
var prefab = handle.Result;

Addressables.Release(handle);

预载

第一个标准解决方案是预加载资源,如下所示,Addressables的设计目的是让已经读取过一次的资源无需等待即可同步获取。

// 预加载 FooPrefab
var handle1 = Addressables.LoadAssetAsync<GameObject>("FooPrefab");
await handle1.Task;
Debug.Log(handle1.Result); 

// 预加载的无需等待即可使用
var handle2 = Addressables.LoadAssetAsync<GameObject>("FooPrefab");
Debug.Log(handle2.Result);

// 实例化也一样
var handle3 = Addressables.InstantiateAsync("FooPrefab");
Debug.Log(handle3.Result);


Addressables.Release(handle1);
Addressables.Release(handle2);
Addressables.Release(handle3);

因此,可以在加载屏幕上预加载所需的资源,并在需要时同步获取它们。

使用专门的Provider

第二种方法是替换加载AssetBundles的Provider,从AssetBundles中加载Assets,关于这一点,Unity的官方示例发布在以下存储库中,可以从这里参考。

在SyncAddressables文件夹中导入一组脚本后,可以通过以下过程确认资源可以同步加载。

  1. 将要同步加载的资源分组到任何Addressables组中
  2. 将AssetProvider和AssetBundleProvider替换为来自组检查器的同步(下图)
  3. 建造
  4. 设置播放模式脚本以使用现有构建
  5. 用SyncAddressables.LoadAsset()读取
ue3d - Unity与Addressable资源系统同步加载资源

现在可以同步加载资源了。

ue3d - Unity与Addressable资源系统同步加载资源

不过如果直接使用这个示例的话,还是有一些需要注意的地方和问题的,所以总结如下。

注意事项

使用同步Provider的Group无法异步读取

第一个是Provider只能针对每个Addressables组进行设置。也就是说,设置了Sync-type Providers的组中的资源将始终被同步读取。

即使使用Addressables.LoadAssetAsync(),它也会被同步读取,因此加载大量资源会冻结。

无法下载

本来,Addressables有一个加载资源时,如果资源不在存储中则下载的功能。

Addressables.LoadAssetAsync()将在内部使用UnityWebRequest来下载资源。

认为这是Addressables API,最初只是异步的主要原因之一。

不兼容Android

另一个重要的警告,或者更确切地说是一个问题,是官方示例与Android不兼容。

这是因为Android上加载应用程序嵌入的资源的方法有点复杂,是一个技术上可以解决的问题,应该重写为以下形式。

支持版本

第三种是使用Addressbles 1.17.4及更高版本,正式支持同步加载,以前的版本不行。

以上是关于如何使用Unity的Addressable资源系统同步加载资源的全部内容,如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:3806
  • 字符:981
  • 适用软件:Unity2020.1.10
  • 说明:无
  • 编号:165795

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!