Addressable详解-02

774 阅读4分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

Addressable详解-02

1.如何使用Addressable Assets

1.1通过地址加载或者实例化

你可以在运行时加载或者实例化一个Addressable Asset。当加载一个asset的时候,会连它的所有依赖项一起加入到内存中,以便你可以正常使用这个asset。但这并不会自动把asset放入场景中,所以必须自己去实例化。调用Addressables提供的实例化接口,会加载这些asset并且将它们立即添加到场景里去。

如果要从脚本访问一个asset,需要提供一个string类型的地址。然后调用UnityEngine.AddressableAssets命名空间下的下列方法:

Addressables.LoadAssetAsync ("AssetName");这个加载指定地址的asset。

Addressables.InstantiateAsync("AssetName");这个实例化指定地址的asset,并且添加到场景中

注意:LoadAssetAsync and InstantiateAsync都是异步操作。你需要提供一个回调函数给调用资源加载的逻辑。当加载结束的时候,会调用这个传入的回调函数。

image-20220220233929621.png

image-20220220233934353.png

1.2使用AssetReference类

AssetReference类提供了一种访问Addressable Assets的方法,并且不需要知道它们的地址。可以通过下列步骤:

1、从Scene的hierarchy界面或者Project 界面选择一个GameObject。

2、在Inspector界面,点击 Add Component按钮,然后选择component类型。任何可序列化的Component 都可以支持AssetReference变量(例如,游戏脚本、ScriptableObject或其他可序列化的类)。

3、在Component 中添加一个public AssetReference 变量(例如,public AssetReference explosion;)。

4、在Inspector中,选择要链接到对象的 Addressable Asset,方法是将Asset从Project窗口拖到public AssetReference字段,或者从项目中先前定义的Addressable Asset的下拉列表中选择。

注意:与普通Addressable Assets一样,LoadAssetAsync和InstantiateAsync是异步操作。你可以提供一个回调,以便在Assets完成加载时调用它(Async operation handling部分可以获得更多信息)。

image-20220220234033879.png

image-20220220234039037.png

image-20220220234052502.png

1.3构建可寻址内容

在你构建APP之前,Addressables Asset System需要先把配置好的asset内容打包成运行时能用的格式。但这个步骤不是自动的,你可以通过Editor的面板操作或者系统提供的API。

Editor打开Addressables窗口,选择Build > New Build > Default Build Script。

API使用AddressableAssetSettings.BuildPlayerContent()。

image-20220220234118970.png

构建完的Addressable数据长这样:

image-20220220234551406.png

image-20220220234602552.png

image-20220220234614247.png

1.4提前下载

调用Addressables.DownloadDependenciesAsync()方法会加载传入的地址或标签的依赖项。通常,依赖项是指assetBundle。

此调用返回的AsyncOperationHandle结构包含一个PercentComplete属性,您可以使用该属性监视和显示下载进度。你也可以让应用程序等到内容加载完成。

如果希望在下载前征得用户的同意,请使用Addressables.GetDownloadSize()返回从给定地址或标签下载内容所需的空间。但要注意,这会排查到任何以前下载过的bundles ,因为它们仍然在Unity的assetBundle缓存里。

尽管提前下载应用程序的asset 大多数时候是有利的,但在某些情况下,你也可能选择不这样做。例如:

如果你的应用程序有大量的在线内容,而且你通常希望用户只与其中的一部分进行交互。

你有一个应用程序,必须连接到网上才能发挥作用。如果应用程序的所有内容都是小包,您可以选择根据需要下载内容。

1.5多平台构建

Addressable Asset System在构建应用程序内容时生成包含可Addressable Asset的AssetBundles。AssetBundles依赖于平台,因此必须为你想要支持的每个独特平台重新构建。

默认情况下,在构建Addressables应用程序数据时,给定平台的数据存储在Addressable构建路径的特定平台子目录中。运行时路径对这些平台文件夹进行了说明,并指向适用的应用程序数据。

注意:如果在Editor Play模式中使用Addressables BuildScriptPackedPlayMode脚本,Addressable将尝试加载当前激活的构建目标的数据。因此,如果当前构建目标数据与当前编辑器平台不兼容,就可能会出现问题。