本文致力于总结Addressables的Group的用法,概念,起到将官方文档关于Group的章节进行整合与精简的作用。
一.分组概述
Ad中对资源分组类似于(不等同)控制资源归属于哪个AB包

分组在unity中的视图

构建后产生AB包文件的数量受分组影响

二.分组的作用和影响
- 内存占用和加载:通过分组划分加载单元,实现资源的按需加载,降低初始内存和加载时间。
- 管理加载路径:确定资源在运行时是从本地还是远程服务器加载,实现资源分发策略。
- 控制打包策略:可通过Bundle Mode的设置将整个组打成一个 Bundle 或 每个文件单独打成 Bundle 或 按标签组合打包
三.分组原则
推荐将需要同时加载的资源放在同一组中
四.Addressables Groups视图
Groups视图用来管理组和资产、启动内容构建、访问工具和设置。可通过菜单Window > Asset Management > Addressables > Groups打开该视图

组上下文菜单

资产上下文菜单

播放模式脚本
播放模式脚本决定仅在unity编辑器运行游戏时,Addressable 系统如何访问资源。

| 模式 | Use Asset Database (fastest) | Simulate Groups (advanced) | Use Existing Build (requires built groups) |
|---|---|---|---|
| 机制 | 直接从Unity的AssetDatabase加载资源,完全绕过Bundle系统。 | 模拟AssetBundle的布局,但实际仍从AssetDatabase加载资源。 | 从之前Build好的实际AssetBundle文件中加载资源 |
| 是否需要Build | 不需要。 | 不需要。 | 必须 先通过Build > New Build打包资源 |
| 主要用途 | 开发功能时,追求最快的代码-编译-测试迭代速度 | 调试阶段,模拟和分析打包后的资源加载策略、内存分布和依赖关系 | 发布前或需要测试真实下载、缓存逻辑时,模拟最终发布版本的真实情况 |
五.Profiles 视图
配置文件视图提供一组变量用于控制构建目录和加载目录
可通过组视图中菜单Profile:Deafault->Manage Profiles打开配置管理界面,如下图所示

通过Create菜单可以创建新配置和变量,新的配置会包含所有的变量。

六.Group在Inspector中的设置
在组视图中选中组,Project视图会选中组的文件,Inspector视图中会显示组相关设置。组的设置影响构建相关的行为,如构建目录,加载目录,AB包压缩方式等信息。
组可以添加架构(Schema),架构是为组定义设置的ScriptableObject,如下所示:

6.1 Content Packing & Loading schema
构建目录和加载目录
该架构可分为两部区域,上面区域控制构建目录和加载目录,当Build&Load Paths选择custom时,Build Path和Load Path可以从相应菜单中指定一个选项

还可以使用Profile视图中添加的路径对变量

通常,不应更改本地构建或加载路径的默认值。如果这样做,则必须StreamingAssets在进行 Player 构建之前将本地构建工件从自定义构建位置复制到项目的文件夹中。更改这些路径还会阻止将可寻址对象作为播放器构建的一部分进行构建。
高级选项

下表列出属性作用,红色部分应该掌握
| Property | Description |
|---|---|
| Asset Bundle Compression | 组生成的所有捆绑包的压缩类型。 LZ4 通常是最有效的选项,但在特定情况下其他选项可能会更好 |
| Include In Build | 启用此属性以在内容构建中包含该组中的资产 |
| Force Unique Provider | 启用此属性可以为此组使用资源提供程序类的唯一实例。如果您对该组中的资产类型有自定义提供程序实现,并且这些提供程序的实例不得在组之间共享,请启用此选项 |
| Use Asset Bundle Cache | 启用此属性可以缓存远程分发的包 |
| Asset Bundle CRC | 启用此属性可以在加载包之前验证包的完整性 •禁用 :不检查包完整性。 •启用,包括缓存 :始终检查包完整性。 •启用,排除缓存:下载时检查包的完整性 |
| Use UnityWebRequest for Local Asset Bundles | 启用此属性可以使用以下命令从该组加载本地 AssetBundle 存档UnityWebRequestAssetBundle.GetAssetBundle而不是AssetBundle.LoadFromFileAsync |
| Request Timeout | 下载远程包的超时间隔 |
| Use Http Chunked Transfer | 启用此属性可在下载捆绑包时使用 HTTP/1.1 分块传输编码方法。 在 Unity 2019.3+ 中已弃用并被忽略 |
| Http Redirect Limit | 下载捆绑包时允许的重定向次数。设置为 -1 表示无限制 |
| Retry Count | 重试失败下载的次数 |
| Include Addresses in Catalog | 启用此属性以在目录中包含地址字符串。如果您不使用地址字符串加载组中的资源,则可以禁用此属性以减小目录的大小. |
| Include GUIDs in Catalog | 启用此属性以在目录中包含 GUID 字符串。您必须包含 GUID 字符串才能访问具有以下属性的资产:AssetReference。如果您不使用AssetReference或 GUID 字符串加载组中的资源,则可以禁用此属性以减小目录的大小 |
| Include Labels in Catalog | 启用此属性以在目录中包含标签字符串。如果您不使用标签加载组中的资源,则可以禁用此属性以减小目录的大小 |
| Internal Asset Naming Mode | 确定 AssetBundles 中资产的标识,并用于从包中加载资产。该值用作internalId资产位置的值。更改此设置会影响捆绑包 CRC 和哈希值。 警告 :请勿修改此设置内容更新构建因为数据存储在内容状态文件变得无效。 不同的模式是: -完整路径 :项目中资产的路径。建议在开发期间使用,因为如果需要,您可以通过 ID 来识别正在加载的资产。 -文件名 :资产的文件名。这也可以用于识别资产。注意 :您不能拥有多个同名的资产。 - GUID :资产的确定性值。 -动态:可以根据组中的资产构建的最短ID。推荐发布,因为它可以减少AssetBundle和目录中的数据量,并降低运行时内存开销。 |
| Internal Bundle Id Mode | 确定如何在内部识别 AssetBundle。这会影响 AssetBundle 查找其他包中包含的依赖项的方式。更改此值会影响该捆绑包以及引用它的所有其他捆绑包的 CRC 和哈希。 -组指南 :组的唯一标识符。推荐使用此模式,因为它不会改变。 -组 GUID 项目 ID 哈希 :如果启用了云服务,则使用组 GUID 和云项目 ID 的组合。如果项目绑定到不同的云项目 ID,则情况会发生变化。当多个项目之间共享资产时,建议使用此模式,因为构建的 ID 是确定性的,并且在项目之间是唯一的。 -组 GUID 项目 ID 条目哈希:使用组 GUID、云项目 ID(如果启用了云服务)和组中的资产条目的组合。使用此模式可能会导致捆绑包缓存版本问题。添加或删除条目会产生不同的哈希值 |
| Cache Clear Behavior | 确定已安装的应用程序何时从缓存中清除 AssetBundles。 |
| Bundle Mode | 设置如何将该组中的资源打包到捆绑包中: -打包在一起:创建包含所有资产的单个包。 -单独打包:为组中的每个主要资产创建一个捆绑包。子资产(例如精灵表中的精灵)打包在一起。添加到组中的文件夹内的资源也会打包在一起。 -按标签打包在一起:为共享相同标签组合的资产创建捆绑包。 |
| Bundle Naming Mode | 设置如何构造AssetBundles的文件名: -文件名 :文件名是从组名派生的字符串。没有附加哈希值。 -将哈希值附加到文件名 :文件名是从组名称派生的字符串,并附加了捆绑哈希值。捆绑包哈希是使用捆绑包的内容计算的。 -使用 AssetBundle 的哈希值 :文件名是捆绑包哈希值。 -使用文件名哈希:文件名是根据组名派生的字符串计算出的哈希值 |
| Asset Load Mode | 设置是根据请求单独加载资源(默认)还是始终一起加载组中的所有资源。在大多数情况下,建议使用请求的资产和依赖项 |
| Asset Provider | 定义 Addressables 使用哪个 Provider 类从该组生成的 AssetBundles 加载资源。将此选项设置为来自 Bundles Provider 的资产,除非您有自定义提供程序实现来提供来自 AssetBundle 的资产 |
| Asset Bundle Provider | 定义Addressables使用哪个Provider类来加载从此组生成的AssetBundles。将此选项设置为AssetBundle Provider,除非您有自定义 Provider 实现来提供 AssetBundles。 |
6.2 Content Update Restriction schema
内容更新限制架构确定检查内容更新限制工具如何处理组中的资产。要为差异内容更新构建而不是完整内容构建准备您的组,请在组视图上,转到**"工具"** 并运行**"检查内容更新限制"** 命令。该工具将启用**"阻止更新"**属性的任何组中已修改的资产移动到新组。
阻止更新属性的作用如下:
- 启用:该工具不会移动任何资产。当您进行更新构建时,如果捆绑包中的任何资产发生了更改,则会重新构建整个捆绑包。
- 已禁用 :如果捆绑包中的任何资产已更改,则检查内容更新限制工具会将它们移至为更新创建的新组。当您进行更新构建时,从此新组创建的 AssetBundles 中的资源会覆盖现有捆绑包中找到的版本。
