Addressable Asset System初探(一)

原文 https://docs.unity3d.com/Packages/com.unity.addressables@0.4/manual/AddressableAssetsOverview.html

Addressable Assets 概述

Addressable Assets 由三个包组成

  • Addressable Assets package(主要包)
  • Resource Manager package (依赖包)
  • Scriptable Build Pipeline package(依赖包)
    当你安装了Addressable Assets包,Resource Manager和Scriptable Build Pipeline packages会在同一时间自动安装。

概念

  • Address - 标识一个资产以便于在运行时检索
  • AddressableAssetData 目录 - 在Project的Assets目录中存储可寻址资产的元数据。
  • Asset Group - 表示可用于构建时处理的一组可寻址资产
  • Asset Group Schema - 定义可以分配给组并在构建期间使用的一组数据。Asset Group组构建的数据是由Schema组成,Schema有点跟Component类似。通过多个Schema可以组成自己的构建数据。
  • AssetReference - 一个对象,其操作类似于直接引用,但具有延迟初始化(例如,对于延迟加载)。AssetReference将GUID存储为可按需加载的可寻址。简单理解AssetReference类存储Asset的GUID,通过GUID可直接加载Asset,而不需要知道Asset的地址。
  • Asynchronous Loading - 允许在整个开发过程中更改资产和依赖项的位置(例如,本地,远程和生成)的位置,而无需更改游戏代码。异步加载是可寻址资产系统的基础。
  • Build Script - 运行资产组处理器来打包资产,并提供资源管理器的地址和资源位置之间的映射。构建配置后续有时间会进行相应的介绍
  • Label - 对相似的资源在加载时提供了额外的可寻址资产标识符。例如
    LoadAll(“spaceHazards”);

Addressable Assets 入门

安装Addressable Assets包

版本要求2018.2或更高版本
要安装此软件包,请按照软件包管理器文档中的说明进行操作。

资产标记可寻址

有两种方法可以将项目标记为可寻址资产。 安装可寻址资产包后,一种是通过在Inspector 窗口中将资产标记为可寻址,该资产默认归在Asset Group的default组中,另外一种是将资产拖到Addressables 窗口中的Asset Group组下。

  • Inspector窗口的标记方式
    在项目的Inspector 窗口中,单击“地址”复选框,然后输入名称以标识“资产”。
    在这里插入图片描述
  • Addressables 窗口的标记方式
    1、打开Addressables 窗口,请单击工具栏中的Window > Asset Management > Addressable Assets即可
    2、将Project窗口的资源文件夹拖动Addressables 窗口的资源组中。
    在这里插入图片描述
    资产的默认地址是项目中资产输入的路径。 例如,Assets / images / myImage.png。 您可以使用Addressables 窗口将地址更改为任何唯一名称。
    要更改地址,请双击资产的当前地址并输入新地址。
    当您第一次开始使用可寻址资产时,系统会在Assets / AddressableAssetsData中为您的项目保存一些编辑时和运行时数据资产,这些数据应添加到您的版本控制签入中。

按地址加载或实例化

您可以在运行时加载或实例化资产。您可以在运行时加载或实例化资产。 加载资产会将所有依赖项加载到内存中(如果相关,则包括资产包数据)。 这允许您在需要时使用资产。 实例化加载资产,然后立即将其添加到场景中。简单理解就是说,在运行时加载或者实例化资源的时候,如果有依赖其它资源,会将其它资源先加载到内存中,然后在实例化资源。这跟传统的Asset bundle有很大的区别。传统Asset Bundle需要先加载依赖的资源然后才能实例化。而通过Addressable Asset System则实现了自动化。调用API的时候会自动将依赖的资源进行加载。
要使用字符串地址访问脚本中的资产:
Addressables.LoadAsset(“AssetAddress”);
或者
Addressables.Instantiate(“AssetAddress”);
LoadAssetInstantiate是异步操作。 加载后,您必须提供回调以使用资产。

 GameObject myGameObject;


        ...
        Addressables.LoadAsset<GameObject>("AssetAddress").Completed += onLoadDone;
    }

    private void private void onLoadDone(UnityEngine.ResourceManagement.IAsyncOperation<Sprite> obj)
    {
        // In a production environment, you should add exception handling to catch scenarios such as a null result;
        myGameObject = obj.Result;
    }

使用AssetReference类

AssetReference类提供了一种访问资产的机制,而无需知道字符串(或其他)地址。
要使用* AssetReference *类访问可寻址资产:
1、选择一个资产。
2、在Inspector面板中,单击“添加组件”按钮,然后选择组件类型。
3、在组件中添加公共AssetReference对象。 例如:

public AssetReference explosion;

4、在Inspector面板中,通过将“资源”从“项目”窗口拖到条目上或单击条目以从以前定义的可寻址资产中进行选择(如下所示),设置对象链接到的资产。
在这里插入图片描述 在这里插入图片描述

通过对象引用加载可寻址资产

要加载AssetReference,请调用其上定义的方法之一。 例如:

AssetRefMember.LoadAsset<GameObject>();

或者

 AssetRefMember.Instantiate<GameObject>(pos, rot)

LoadAssetInstantiate是异步操作。 加载后,您必须提供回调以使用资产。

提前下载

调用Addressables.PreloadDependencies方法会加载您传入的地址或标签的依赖关系。通常,这是资产包。
简单理解,该方法为预加载的功能,会将资源所依赖的资源进行加载。
此调用返回的IAsyncOperation对象包含PercentComplete属性,可用于监视下载进度。您可以使用完成百分比来显示进度条,让应用程序等到内容加载完毕。
虽然提前为您的应用程序下载资产可能是有利的,但有些情况下您可能选择不这样做。例如:
1、如果您的应用拥有大量在线内容,并且您通常希望用户只与其中的一部分进行互动。
2、您有一个必须在线连接才能运行的应用程序。例如,多人游戏。如果应用程序的所有内容都是小包,您可以选择等待并根据需要下载内容。
3、您也可以选择部分使用预加载功能。您可以开始下载然后继续,而不是要等到百分比完成才对内容加载。实际加载资产时,您需要稍后创建加载/等待屏幕。如果预加载已完成,则加载速度很快,否则应用程序需要等到内容加载完毕。

下一篇

https://blog.csdn.net/EIE08027/article/details/84103628

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值