Unity热更新之Addressables——配置与打包(贰)
三、配置相关
(一)Profile 概述窗口配置
1、概述
用于配置Addressables打包和加载AB包的一些变量。
这些变量定义了保存/加载AB包的路径,也可以自己添加变量
2、Profiles窗口位置
- Window -> Asset Management -> Addressables -> Profiles
- AddressableAssetSettings打开
- Addressables Groups窗口打开
3、参数讲解

右侧默认参数:
- BuildTarget:构建目标平台,默认就是你激活的平台
- Local BuildPath:本地构建路径,默认在Library库文件夹中
- Local LoadPath:本地加载路径
- Remote BuildPath:远程构建路径
- Remote LoadPath:远程加载路径
默认情况下,不需要修改本地构建和加载路径的默认值。而且针对不同平台的内容,可以通过多个配置文件。
创建:(左上角create)
- Profile:概述文件
- Variable:变量
- Build Load Path Variables:构建加载路径变量
4、变量语法
上面的路径中,会发现有[]也有{},下面讲解含义:
-
[]:包裹变量,打包构建时计算方括号内的内容- 如使用自己的变量
[BuildTarget],使用其他脚本变量[UnityEditor.EditorUserBuildSettings.activeBuildTarget]
- 如使用自己的变量
-
{}:包裹变量,运行时计算大括号包裹内容- 如使用其他脚本变量
{UnityEngine.AddressableAssets.Addressables.RuntimePath}
- 如使用其他脚本变量
-
方括号和大括号使用的变量必须是静态变量或属性。
-
游戏运行时,无法使用UnityEditor编辑器命名空间下的内容
(二)AddressableAssetSettings 可寻址资源数据配置
1、配置文件概述
导入Addressables包之后,会创建一些配置文件,本质都是ScriptableObject的数据配置文件。
这些配置文件可以进行设置,影响打包方式等相关内容

- AddressableAssetsData文件夹(可寻址资源数据)
- AssetGroups文件夹:存放资源组配置文件,每创建一个组就会多一些相关配置文件
- AssetGroupTemplates文件夹:资源组模板,资源的一些默认设置
- Packed Assets:打包资源数据配置
- DataBuilders文件夹:(数据生成器,不同模式下,资源打包使用的方式)
- BuildScriptFastMode:构建脚本快速模式
- BuildScriptPackedMode:构建脚本打包模式
- BuildScriptPackedPlayMode:构建脚本打包播放模式
- BuildScriptVirtualMode:构建脚本虚拟模式
- AddressableAssetSettings:可寻址资源设置,本节的重点
- DefaultObject:默认对象
2、AddressableAssetSettings参数讲解

-
Profiles(概述):选择和管理Profile配置文件
-
Diagnostics(诊断):
- Send Profiler Event:启用分析器事件,可在Event Viewer窗口查看相关信息
- Log Runtime Exceptions:记录运行时加载相关的异常
-
Catalog(目录):
-
Player Version Override:重写用于指定远程目录名的时间戳,不设置默认用时间戳作为远程目录名
-
Compress Local Catalog:在压缩的AssetBundle文件中生成目录,可压缩大小,但会增加生成和加载时间
-
Optimize Catalog Size**(Unity2022好像没看到这个)**:通过为内部ID创建查找表,减少目录大小,但会增加加载目录的时间
-
Build Remote Catalog:勾选后可以构建远程目录
-
Only update catalogs manually: 启用后,禁用在可寻址系统运行时自动检查更新远程目录。需要手动操作
-
Update a Previous Build:
- Check for Update Issues:是否在升级过程中执行内容更新限制检查,并指定该检查结果的处理方式
- Content State Build Path:设置默认构建脚本生成的内容状态文件的路径
-
Downloads:
- Custom certificate handler:用于自定义证书处理的类
- Max Concurrent Web Requests:系统对超过此限制的任何请求进行队列处理
- Catalog Download Timeout:等待目录文件下载的时间为多少秒
-
Build:
- Build Addressables on Player Build:选择 Unity 在执行玩家程序打包的过程中,以何种方式构建可寻址资源
- Ignore Invalid/Unsupported Files in Build:启用后,忽略生成中无效不受支持的文件,而不是中止生成
- Unique Bundle IDs:唯一约束ID,是否为每个构建中的包生成一个唯一的名称
- Contiguous Bundles:连续捆绑,生成更高效的捆绑包布局。如果有Addressables 1.12.1或更早版本生成的捆绑包,请禁用此选项以最小化捆绑包更改
- Non-Recursive Dependency Calculation:非递归依赖计算,不使用递归计算依赖项
- Shader Bundle Naming Prefix:着色器包命名前缀
- MonoScript Bundle Naming Prefix:Mono脚本包命名前缀
- Strip Unity Version From AssetBundles:从AssetBundles中剥离Unity版本,决定是否从包头中删除版本信息
- Disable Visible Sub Asset Representations:禁用可见子资源,如果您不直接使用子对象(Sprite、子网格等),则启用此选项可以提升构建时间
-
Build and Play Mode Scripts(构建和编辑器模式脚本):就是决定进入Play Mode时,Addressable系统如何加载资产,在上面讲过的DataBuilders文件夹下找到相关配置可以进行关联。这也是Addressables Groups窗口的Play Mode Scripts选项和Build选项的内容。
-
Asset Group Templates(资源组模板):创建的模板需要添加到该列表才能使用,默认有一个模板,包含默认构建脚本使用的模式,可以在AssetGroupTemplates文件夹中找到
-
Initialization Objects:初始化对象列表
-
Cloud Content Delivery:Unity 官方托管的云服务相关
3、重点总结
- 概述配置:决定路径配置
- 诊断:决定调试相关
- 目录:决定目录后缀等内容
- 内容更新:决定更新相关方案
- 构建和编辑器模式脚本:决定测试方案
- 资源组模板:决定创建组时的配置模板
(三)Packed Assets 打包资源配置
1、作用
确定如何处理组中的资源,如指定生成AB包的位置、包压缩,AB包加载等相关设置。简单来说就是指定AB包打包加载相关的规则
Packed Assets就是默认的资源组模板
2、参数讲解

-
Build & Load Paths:构建和加载路径
-
Advanced Options:高级选项
- Asset Bundle Compression:AB包压缩方式
- Uncompressed:不压缩,包较大,不推荐
- LZ4:压缩,相对LZMA大一点点,建议使用,用什么解压什么,内存占用低
- LZMA:压缩最小,解压慢,用一个资源要解压所有
- Include In Build:包含在构建中,是否在内容生成中包含此组中的资源。取消勾选则打包时不会打包该组内容
- Force Unique Provider:强制唯一提供者,Addressable是否对此组使用资源提供程序类的唯一实例。如果有此组中的资产类型的自定义提供程序实现,并且这些提供程序的实例不能在组之间共享,则启用此选项。
- Use Asset Bundle Cache:使用AB包缓存,是否缓存远程分发的包
- Asset Bundle CRC:是否在加载前验证AB包的完整性
- Disabled:永远不检查完整性
- Enabled,Including Cached:检查完整性,包括缓存也检查
- Enabled,Excluding Cached:检查完整性,但是不检查缓存的包
- Use UnityWebRequest for Local Asset Bundle:加载AB包时,使用
UnityWebRequestAssetBundle.GetAssetBundle而不是AssetBundle.LoadFromFileAsync - Request Timeout:下载远程包时超时的间隔时间
- Use Http Chunked Transfer:下载包时是否使用HTTP/1.1块传输编码方法。 在2019.3+中被废弃和忽略
- Http Redirect Limit:下载包时允许重定向的次数。无限制设置为-1
- Retry Count:重试失败下载的次数
- Include Addresses in Catalog:是否在目录中包含地址字符串(就是Addressable Name)。如果不使用则取消勾选来减小目录的大小。
- Include GUIDs in Catalog:是否在目录中包含GUID字符串。您必须包含guid字符串才能使用资产参考(即
AssetReferences类)。如果不使用则取消勾选来减小目录的大小。 - Include Labels in Catalog:是否在目录中包含标签字符串(就是Label)。如果不使用则取消勾选来减小目录的大小。
- Internal Asset Naming Mode:如何在内部命名目录中的资源(从AB包加载某个资源时,Unity在内部用什么名字去寻找它)
- Full Path:全路径
- FileName:文件名
- GUID:资源的Guid字符串
- Dynamic:Addressables根据组中的资源选择最小的内部名称
- Internal Bundle Id Mode:确定如何构造资产绑定的内部ID(就是Unity在内部用什么 “名字” 来唯一标识一个AB包)
- Group Guid:组的Guid
- Group Guid Project Id Hash:组的ID和工程ID的哈希
- Group Guid Project Id Entries Hash:组的ID和工程ID项的哈希
- Cache Clear Behavior:确定安装的应用程序何时从缓存中清除AB包
- Clear When Space Is Needed In Cache:在缓存中需要空间时清除
- Clear When When new Version Loaded:加载新版本时清除
- Bundle Mode:打包模式,如何将此组中的资产打包到包中
- Pack Together:创建包含所有资产的单个包 。
- Pack Separately:为组中的每个主要资产创建一个包。如精灵图片中的精灵图片被包装在一起。添加到组中的文件夹中的资源也打包在一起。
- Pack Together by Label:为组内共享相同标签组合的资产创建一个包。
- Bundle Naming Mode:如何构造AB包的文件名
- Filename:文件名
- Append Hash to Filename:将哈希附加到文件名
- Use Hash of AssetBundle:使用AB包的哈希
- Use Hash of FileName:使用文件名的哈希
- Asset Load Mode:资源加载模式
- Requested Asset And Dependencies:请求的资源和依赖项(请求什么就加载什么)
- All Packed Assets And Dependencies:所有包中的资源和依赖项(请求后,就将对应包全部加载)
- Asset Provider:资源提供者。当从这个组生成的AB包加载资源时,应该用哪一个加载器代码来执行加载操作。
默认的就行了,除非自己写了一套自定义的加载逻辑 - Asset Bundle Provider:AB包提供器。和Asset Provider类似,不过这个是负责把AB包从硬盘或网上加载到内存里。而上面的是从AB包加载资源。
- Asset Bundle Compression:AB包压缩方式
-
Content Update Restriction:更新内容限制
- Can Change Post Release:可以改变发行后内容,该模式不移动任何资源,如果包中的任何资源发生了更改,则重新构建整个包
- Cannot Change Post Release:无法改变发布后内容,如果包中任何资源已经改变,则 [检查内容更新限制] 工具会将其移动到新组中。在进行更新构建时,从这个新组创建的AB包中的资产将覆盖现有包中的版本。
注:现在版本是Prevent Updates(防止更新)参数,不勾选则代表Can Change Post Release(整包更新),勾选则代表Cannot Change Post Release(局部更新)
3、Add Schema按钮
Add Schema(添加模式) :你可以将任意数量的架构模式给一个组
- Content Packing Loading:内容打包加载相关 (即上面讲解的参数)
- Content Update Restriction:内容更新限制 (即上面讲解的参数)
- Resources and Built In Scenes:在内置数据中显示哪些类型的内置资源(可以选择是否显示资源和内置场景)
可以通过继承AddressableAssetGroupSchema定义自己的架构模式
4、创建自定义组模板
Create -> Addressables -> Group Templates -> Blank Group Template
之后在Addressables Groups窗口创建组的时候就可以选择模板了
(四)Addressables Hosting 可寻址托管窗口
1、作用
一般的资源服务器需要搭建http服务器,才能进行资源上传和下载。
Unity为了简化本地测试的过程,提供了快捷搭建http服务器的工具——Addressables Hosting窗口,这样就可以将本机作为一台资源服务器,从而快速进行远程打包下载的测试
2、打开窗口
- 方式一:Window -> Asset Management -> Addressables -> Hosting
- 方式二:Addressables Groups窗口 -> Tools -> Window -> Hosting Services
3、创建
- Local Hosting:本地托管,通过本机模拟加载相关内容 (一般选这个)
- Custom Service:自定义服务
4、参数

- Service Name:服务器名称
- Service Type(ID):服务器类型
- Port:端口号(一般不自己设置,避免和其它应用产生冲突)
- Upload Speed(kb/s):上载速度
- Enable:是否启用,启用后会自动分配端口号
- Hosting Service Variables:托管服务变量
- Variable Name:变量名
- Value:值,可以使用这些变量名来编辑Profiles窗口中的发布和加载相关路径
如:http://[PrivateIpAddress]:[HostingServicePort]/[BuildTarget]
5、说明
如果这种方式使用时发现失效了,可以使用第三方快速搭建http服务器的工具,将本机模拟为远端服务器
四、资源打包(发布)加载
(一)资源打包加载理论
1、概念
资源打包指将可寻址资源打包到AssetBundle资源绑定包中。可寻址资源中资源一般以组为单位打包,最终AB包数量是基于资源组决定的。
打包AB包后,如何使用:
- 发布游戏时将所有AB包作为原始资源打包(此时的作用仅仅是让单机游戏减小包体)
- 将AB包放到远端服务器,发布游戏时只打包必备资源(减小包体、热更新)
2、资源打包模式
在Packed Assets那节中,高级设置参数的Bundle Mode讲过,配置每组的打包方式:
- Pack Together:创建包含所有资产的单个包。
- Pack Separately:为组中的每种类型资产创建一个包。
- Pack Together by Label:为组内共享相同标签组合的资产创建一个包。
3、注意事项
- 场景资源始终有自己单独的包:如果包中场景资源和普通资源一起,那么场景会单独分成一个包
- 如果资源a和b在不同的组中,它们都引用了资源c,但是资源c不是可寻址资源,此时资源c就会分别打进a的包和b的包。这样就造成了重复,解决方案是将c作为可寻址资源,比如在c包。此时a包和b包依赖c包,Addressable会自动处理依赖问题
- 合理对可寻址资源分组:同类型、同作用的放一起
- 包(分组)的数量要合理布局,组过多或过大都不好
(二)资源打包加载
1、编辑器中加载资源的方式
在寻址资源设置那节已经讲过了:
-
Use Asset Database (fastest):使用资源数据库,不打AB包,直接使用本地文件夹中的资源
-
Simulate Groups (advanced):模拟组,不打AB包,通过ResourceManager从资产数据库加载资源,引入时间延迟,模拟远程资产绑定的下载速度和本地绑定的文件加载速度,就像通过AB包加载一样
-
Use Existing Build (requires built groups):正经的远端加载资源,必须打AB包,从AB包加载资源
2、本地资源发布
- 所有组的加载和发布都选择本地路径:Local BuildPath、Local LoadPath
- 使用默认设置,当发布应用程序(Build)时,会自动帮我们将AB包放入StreamingAssets文件夹中。
- 如果手动修改了上面提到的路径,需要自己将内容放入StreamingAssets文件夹中。因此不建议修改默认的本地加载和构建路径
3、模拟远端发布资源
- 将本机模拟为一台资源服务器(之前Addressables Hosting讲过)
- 设置远端路径,修改后记得在AddressableAssetSettings中的Catalog下的Build Remote Catalog参数勾选,否则不会自动创建重要的相关目录文件。(新版本设置Remote LoadPath时,如果发现连接不上,试试后面不加上
/[BuildTarget],设置基础URL即可) - 打包并测试
4、实际的远端发布资源
- 远端电脑上搭建http服务器
- 将打包的资源上传到对应服务器上
(三)资源更新
1、资源更新概念
当项目正是发布后,对于远程加载的资源,可以通过改变资源服务器上的AB包内容来达到更新游戏的目的。Addressable会自动判断更新的资源并加载最新内容。
2、内容更新限制回顾
之前在Packed Assets那节讲过,Content Update Restriction的两个参数:
- Can Change Post Release:如果包中的任何资源发生了更改,则重新构建整个包 (整包更新)
- Cannot Change Post Release:无法改变发布后内容,如果包中任何资源已经改变,则 [检查内容更新限制] 工具会将其移动到新组中。进行更新构建时,从这个新组创建的AB包中资产将覆盖现有包中的版本。(局部更新)
注:现在版本是Prevent Updates(防止更新)参数,不勾选则代表Can Change Post Release(整包更新),勾选则代表Cannot Change Post Release(局部更新)
3、整包更新
组设置为不勾选Prevent Updates,适用于大范围资源更新时使用,坏处是下载的内容比较大,比较耗时耗流量。
- 更新内容时,不是点Build里的New Build,而是点击Update a previous Build(更新之前的构建)
4、局部更新
组设置为勾选Prevent Updates,局部更新指当族中资源变化时,单独为变化的资源生成AB包,使用改资源时Addressables会自动加载最新内容,相对整包更新更节约时间和流量
- 同样更新内容时点击Update a previous Build,然后会弹出一个窗口,勾选需要更新的内容即可
