四、可寻址系统概述

本文介绍了Unity的Addressables系统,这是一个随项目规模扩展而成长的资源管理系统。它允许从简单的设置开始,随着内容和团队的增长进行重组。Addressables支持按需加载资源,使用资产地址、标签和AssetReferences进行管理,并具备依赖处理和多平台支持。该系统通过内容构建、AssetBundle和可自定义的IResourceProvider实现灵活的资产加载和优化。
摘要由CSDN通过智能技术生成

Addressables 提供了一个可以与您的项目一起成长的系统。您可以从一个简单的设置开始,然后随着项目的复杂性和团队规模的扩大而重新组织,并且您可以通过最少的代码更改来完成这一切。

例如,您可以从一组可寻址资产开始,Unity 将其作为一个集合加载。然后,当您添加更多内容时,您可以将您的资源分成多个组,这样您就可以在给定时间只加载您需要的资源。随着团队规模的扩大,您可以创建单独的 Unity 项目来开发不同类型的资产。这些辅助项目可以生成自己的 Addressables 内容构建,您可以从主项目加载这些内容构建(同样只需最少的代码更改)。

本概述讨论了以下概念,以帮助您了解如何使用 Addressables 系统管理和使用您的资产:

  • 资产地址:标识可寻址资产的字符串 ID。您可以使用地址作为密钥来加载资产。
  • AssetReferences:一种可用于支持将可寻址资产分配给检查器窗口中的字段的类型。您可以使用 AssetReference 实例作为加载资产的键。AssetReference类还提供自己的加载方法。
  • Label:一个标签,您可以将其分配给多个资产并用于将相关资产作为一个组一起加载。您可以使用标签作为键来加载资产。
  • 资产位置:描述如何加载资产及其依赖项的运行时对象。您可以使用位置对象作为加载资产的键。
  • :标识一个或多个可寻址的对象。键包括地址、标签、AssetReference 实例和位置对象。
  • 资产加载和卸载:Addressables API 提供了自己的函数来在运行时加载和释放资产。
  • 依赖项:资产依赖项是一种资产被另一种资产使用,例如场景资产中使用的预制件或预制件资产中使用的材质。
  • 依赖和资源管理:Addressables 系统使用引用计数来跟踪正在使用哪些资产和 AssetBundle,包括系统是否应该加载或卸载依赖项(其他引用的资产)。
  • :您可以在编辑器中将资产分配给组。组设置决定了 Addressables 如何将组资产打包到 AssetBundle 中,以及它如何在运行时加载它们。
  • 内容目录:Addressables 使用目录将您的资产映射到包含它们的资源。
  • 内容构建:当使用 Addressables 时,您可以在构建播放器之前将内容构建作为一个单独的步骤来整理和打包您的资产。
  • 多平台支持:构建系统分离平台构建的内容,并在运行时解析正确的路径。
  • Addressables 工具:Addressables 包包含多个用于组织、构建和优化内容的窗口和工具。

默认情况下,Addressables 使用 AssetBundle 来打包您的资产。您还可以实现自己的IResourceProvider类以支持其他访问资产的方式。

资产地址

Addressables 系统的一个关键特性是您可以为您的资产分配地址,并使用这些地址在运行时加载它们。Addressables 资源管理器在内容目录中查找地址以找出资产的存储位置。(资产可以内置到您的应用程序、本地缓存或远程托管。)资源管理器加载资产和任何依赖项,如有必要,首先下载内容。


Addressables 通过地址加载资产,无论它们位于何处

由于地址与资产的物理位置无关,因此在 Unity 编辑器和运行时管理和优化资产时,您可以更加灵活。目录将地址映射到物理位置。

虽然,您通常应该为您的资产分配唯一地址,但资产地址不需要是唯一的。您可以在有用时将相同的地址字符串分配给多个资产。例如,如果您有资产的变体,您可以为所有变体分配相同的地址并使用标签来区分变体:

  • 资产 1:地址:“plate_armor_rusty”,标签:“hd”
  • 资产 2:地址:“plate_armor_rusty”,标签:“sd”

仅加载单个资产的可寻址 API 函数(例如LoadAssetAsync)会加载找到的第一个实例(如果您使用分配给多个资产的地址调用它们)。其他功能,如LoadAssetsAsync,在一次操作中加载多个资产并加载具有指定地址的所有资产。

提示

您可以使用LoadAssetsAsyncMergeMode参数来加载两个键的交集。

在上面的示例中,您可以指定地址“plate_armor_rusty”和标签“hd”作为键和交集作为加载“资产 1”的合并模式。您可以将标签值更改为“sd”以加载“资产 2”。

有关如何为资产分配地址的信息,请参阅使资产可寻址。

请参阅加载资产了解如何通过键加载资产,包括地址。

资产参考

AssetReference 是一种类型,您可以将其设置为任何类型的可寻址资产。Unity 不会自动加载分配给引用的资产,因此您可以更好地控制何时加载和卸载它。

在 MonoBehaviours 和 ScriptableObjects 中使用 AssetReference 类型的字段来帮助您指定要用于该字段的可寻址资产(而不是使用指定地址的字符串)。AssetReferences 支持拖放和对象选择器分配,这可以使它们更方便地在 Editor Inspector 中使用。

除了基本的 AssetReference 类型之外,Addressables 还提供了一些更特殊的类型,例如 AssetReferenceGameObject 和 AssetReferenceTexture。您可以使用这些专门的子类来消除将错误类型的资产分配给 AssetReference 字段的可能性。此外,您可以使用 AssetReferenceUILabelRestriction 属性来限制对具有特定标签的资产的分配。

有关详细信息,请参阅使用 AssetReferences 。

加载和释放资产

要加载可寻址资产,您可以使用其地址或其他键,例如标签或 AssetReference。有关详细信息,请参阅加载可寻址资产。您只需要加载主要资产;Addressables 会自动加载任何相关资产。

当您的应用程序在运行时不再需要访问 Addressable 资产时,您必须释放它以便 Addressables 可以释放关联的内存。Addressables 系统保留加载资产的引用计数。在引用计数归零之前,它不会卸载资产。因此,您无需跟踪资产或其依赖项是否仍在使用;您只需要确保无论何时显式加载资产,当您的应用程序不再需要该实例时就释放它。有关更多信息,请参阅释放可寻址资产。

依赖和资源管理

Unity 中的一项资产可以依赖于另一项资产。一个场景可能引用一个或多个预制件;预制件可能使用一种或多种材料。相同的材质可以被多个预制件使用,并且这些预制件可以存在于不同的 AssetBundle 中。当您加载可寻址资产时,系统会自动查找并加载它引用的任何依赖资产。当系统卸载资产时,它也会卸载它的依赖项——除非它们仍在被不同的资产使用。

当您加载和释放资产时,Addressables 系统会为每个项目保留一个引用计数。当资产不再被引用时,Addressables 将卸载它。如果资产位于不再包含任何正在使用的资产的包中,Addressables 也会卸载该包。

有关详细信息,请参阅内存管理。

可寻址组和标签

使用可寻址组来组织您的内容。所有可寻址资产都属于一个组。如果您没有明确地将资产分配给组,Addressables 会将其添加到默认组。

您可以设置组设置以指定 Addressables 构建系统应如何将组中的资产打包成包。例如,您可以选择是否将一组中的所有资产打包到一个 AssetBundle 文件中。

使用标签来标记您想要以某种方式一起处理的内容。例如,如果您为“红色”、“帽子”和“羽毛”定义了标签,则可以在一次操作中加载所有带有羽毛的红色帽子,无论它们是否属于同一个 AssetBundle。此外,您可以使用标签来确定组中的资产如何打包到包中。

使用Addressables Groups窗口将资产添加到组并在组之间移动资产。您还可以在“组”窗口中为您的资产分配标签。

组模式

分配给组的模式定义了用于构建组中资产的设置。不同的模式可以定义不同的设置组。例如,一个标准模式定义了如何将资产打包和压缩到 AssetBundle 中的设置(以及其他选项)。另一个标准模式定义了组中的资产属于“可以更改发布后”和“不能更改发布后”类别中的哪一个。

您可以定义自己的架构以与自定义构建脚本一起使用。

有关组模式的更多信息,请参阅模式。

内容目录

Addressables 系统生成一个内容目录文件,将您的资产地址映射到它们的物理位置。它还可以创建一个哈希文件,其中包含目录的哈希值(数学指纹)。如果您远程托管可寻址资产,系统会使用此哈希文件来确定内容目录是否已更改并需要下载。有关详细信息,请参阅内容目录。

执行内容构建时选择的配置文件决定了内容目录中的地址如何映射到资源加载路径。有关详细信息,请参阅配置文件。

有关远程托管内容的信息,请参阅远程分发内容。

内容构建

Addressables 系统将 Addressable 内容的构建与播放器的构建分开。内容构建会生成内容目录、目录哈希和包含您的资产的 AssetBundle。

由于资产格式是特定于平台的,因此您必须在构建播放器之前为每个平台构建内容。

有关详细信息,请参阅构建可寻址内容。

播放模式脚本

当您在编辑器播放模式下运行您的游戏或应用程序时,总是在按下播放按钮之前执行内容构建可能会很不方便且速度很慢。同时,您确实希望能够在尽可能接近内置玩家的状态下运行您的游戏。为了灵活性,Addressables 提供了三个选项来确定 Addressables 系统如何在播放模式下定位和加载资产:

  • 使用资产数据库:Addressables 直接从资产数据库加载资产。如果您同时更改代码和资产,此选项通常提供最快的迭代速度,但也最不像生产构建。
  • 模拟组:Addressables 在模拟组时加载资产。如果您正在组织和优化您的 Addressables 组,此选项很有用。它提供 Addressables 事件,而无需在每次更改后重建完整的内容。
  • 使用现有构建:Addressables 从您的最后一个内容构建中加载内容。此选项最类似于生产构建,如果您不更改资产,则可以提供快速迭代周转。

有关详细信息,请参阅播放模式脚本。

支持多平台

Addressables 通过在构建路径中包含目标平台名称并确保在您构建播放器时将正确的平台文件复制到 StreamingAssets 文件夹来支持为多个平台设计的项目。

寻址工具

Addressables 系统提供了一些工具和窗口来帮助您管理 Addressable 资产:

  • Addressable Groups 窗口:Groups 窗口是管理资产、组设置和构建的主要界面。
  • 配置文件窗口:帮助设置您的构建使用的路径。
  • Addressables 事件查看器:监控和分析与您的 Addressable 资产相关的运行时事件。
  • 分析工具:分析工具运行分析规则,检查您的可寻址内容是否符合您定义的规则集。Addressables 系统提供了一些基本规则,例如检查重复资产;您可以使用AnalyzeRule类添加自己的规则。
  • 托管工具:托管工具提供了一个简单的资产托管服务,该服务从 Unity Editor 运行以帮助项目的开发和测试。
  • 构建布局报告:描述内容构建生成的 AssetBundle。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值