ue3dAddressable可寻址资产系统3个优点和基本使用方法

Addressable可寻址资产系统3个优点和基本使用方法

分类:

本文将总结Unity的Addressable资产系统的概要、优点和基本使用方法,主要是3个优点和基本使用方法,没有涵盖的内容或许会在其他文章中总结。

AssetBundle的管理目前有点麻烦

首先,为了了解Addressable资产系统的产生过程,需回顾一下Addressable资产系统出现之前的情况。

  • Unity可以将下载内容压缩成AssetBundle形式发布。
  • AssetBundle提供了压缩机制和解压缩后加载机制,

最多UnityWebRequestAssetBundle的简单缓存机制,如下文所述。

因此,为了在游戏中实际使用可下载的内容,有必要实现各种实现,每个开发人员都实现了复杂的部分,例如内存管理和依赖关系管理。

然而,事实证明,所有开发人员都以相同的方式实现了它们中的大多数,在这种情况下,它应该被整合到游戏引擎中,可寻址资产系统就这样诞生了。

让我们看一下以前需要实现但现在由Addressable支持的一些功能。

顺便说一句,Addressable内部使用AssetBundle,因此如果对AssetBundle有基本的了解,则更容易理解。

AssetBundle的基础知识总结在下面的文章中,因此请根据需要参考。

可寻址资产系统的优点

选择负载源

作为以前需要独自实现的功能,有切换资源的加载源的功能。

即使是最终需要AssetBundle化读取资源的项目,在开发过程中也有可能不使用AssetBundle。这是因为AssetBundle不构建的话就无法确认,阻碍了快速的迭代。

因此…

需要制作允许用户选择AssetBundle还是AssetDatabase加载源的功能。

允许用户选择AssetBundle还是AssetDatabase加载源

使用Addressable,只需切换单个设置即可完成此操作。

切换设置

依赖关系管理

如果AssetBundle相互依赖,则必须首先加载加载目标所依赖的所有AssetBundle,有规范,需要加载的AssetBundle无法正常加载。

可以从下面的站内文章了解相关内容。

因此,有必要实现一个函数,该函数在加载AssetBundle时检索所有依赖项并首先加载它们。

但实际上,Addressable也支持这一点,当尝试加载资源时,它将提前加载所有依赖的AssetBundle。

依赖关系管理

此功能允许Addressables描述加载资源的过程,而无需担心依赖关系。

内存管理

AssetBundle的另一个难点是内存管理。例如,现在要加载如下图所示的AssetBundle A,
AssetBundle A中有AsetBundle B,所以也需要加载。

AssetBundle A中有AsetBundle B

然后像下图一样加载AssetBundle C。

AssetBundle C也与AsetBundle B相连,它已经被加载,所以使用它。

AssetBundle C也与AsetBundle B相连,它已经被加载,所以使用它

这里考虑卸载AssetBundle A,这时,如果没有其他依存关系,就必须卸载AssetBundle B。

这个时候AssetBundle B和AssetBundle C是相连的,所以还不能卸载。

AssetBundle B和AssetBundle C是相连的,所以还不能卸载

在卸载AssetBundle C的时候,需要卸载AssetBundle B。

在卸载AssetBundle C的时候,需要卸载AssetBundle B

像这样,做好AssetBundle的内存管理是很麻烦的,需要在内部预先拥有参考计数器等的实现。

Addresssables包含了基于这种依存关系的参照计数器的结构。也就是说,对某个AssetBundle加载一次,就必须卸载一次。

只要遵守这样的规则,就能保证包括依存关系在内的存储器的干净状态。

Addressable基本使用方法

安装

了解了概念之后,接下来将通过实际接触来理解Addressable。

首先进行安装,Addressable资产系统可以通过Package管理器进行安装。

Package管理器进行安装Addressable

Package Manager将在下面的文章中进行说明,请根据需要参考。

加上Addressable地址

那么实际使用Addressable的功能,作为Addressable的基本,首先要给资产加上地址。在Addressable中,不是指定资产路径或AssetBundle名,而是指定这个地址来加载资产。

由于不直接指定路径和AssetBundle名称,所以在选择负载源中说明的加载源的切换变得容易。

安装Addressable后,在资产的监视器中会出现Addressable这个选项。

加上Addressable地址

启用这个复选框的话,就会分配地址。

分配地址

默认是那个资产的路径,但是可以自由改变。

改变资产路径

另外,附带地址的资产列表可以通过Window > Asset Management > Addressables > Groups查看。

当你打开这个窗口时,可以在Default Local Group中看到刚才的资产和地址。

在Default Local Group中看到刚才的资产和地址

在这个窗口中,可以编辑已有的地址,也可以拖拽资产来添加地址。

指定地址名后加载

然后通过地址加载这个资产,发展是addressables.loadassetasync()使用。

using UnityEngine;
using UnityEngine.AddressableAssets;

public class Example : MonoBehaviour
{
    private void Start()
    {
        Addressables
            .LoadAssetAsync<GameObject>("Example") // 用字符串指定地址
            .Completed += op => {
                // 获取结果并实例化
                // 错误处理本来是必要的
                Instantiate(op.Result);
            };
    }
}

用完后用addressable . release()卸载。

串行加载

另一种加载方法是将AssetReferenceXxx类串行化。

[SerializeField]
private AssetReferenceGameObject _reference;

将其串行后就可以从Inspector中选择地址了。

串行后就可以从Inspector中选择地址

然后,在这里指定的状态下使用LoadAssetAsync()就可以加载对象的资产。

using UnityEngine;
using UnityEngine.AddressableAssets;

public class Example : MonoBehaviour
{
[SerializeField]
private GameObject _gameObject;

    [SerializeField]
    private AssetReferenceGameObject _reference;

    private void Start()
    {
        _reference
            .LoadAssetAsync()
            .Completed += op => {
                Instantiate(op.Result);
            };
    }
}

同样,用完后用_reference. releaseasset()卸载,另外,这种方法即使重新命名地址,也不需要更改源代码。

Play Mode

Addressable具有从AssetDatabase或从AssetBundle读取资源等简单改变读取模式的功能。要使用它,打开Addressables Groups窗口的Play Mode Script下载。

打开Addressables Groups窗口

每种模式的说明如下所示。

项目名称说明
Use Asset Database(faseter)从AssetDatabase读取资产
Simulate Groups(advanced)从AssetDatabase读取资产,
分析AssetBundle的依赖关系
就像从AssetBundle读取一样。
Use Existing Build(requires built groups)从AssetBundle读取(根据需要构建)

如果要使用Use Existing Build的话,在播放之前需要进行构建。构建从Addressables Groups窗口选择Build > New Build > Default Build Script。

使用Use Existing Build的步骤

另外,AssetBundle的读取源和构建路径可以自由设定,这在本文中不会做说明。

以上是3D天堂网关于可寻址资产系统的优点和使用方法的全部内容,如果你有任何反馈,请随时在本页面下方留言。

相关信息

  • 类型:知识
  • 字数:1580
  • 字符:5813
  • 适用软件:Unity
  • 说明:无
  • 编号:169132

热门内容

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

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