Unity Addressables 热更新 基础
Addressables 基础解析
Addressables 提供用于组织和打包应用程序内容的工具和脚本,以及用于在运行时加载和发布资产的 API。
当您将资产设为 “Addressable” 时,您可以使用该资产的地址从任何地方加载它。无论该资产驻留在本地应用程序中还是内容交付网络上,Addressables 都会找到并返回它。
Addressable Asset Settings(可寻址资源设置)
Profile(配置文件)
点击 Manage Profiles 按钮以打开“配置文件”窗口,您可以在其中创建新的配置文件和更改配置文件变量。

Diagnostics(诊断工具)
Send Profiler Events(发送探查器事件):
启用探查器事件。必须启用此设置才能使用可寻址文件事件查看器窗。
Log Runtime Exceptions(日志运行时异常):
记录资产加载操作的运行时异常(除了将错误记录到异步操作处理.operationException属性)。

Catalog(目录)
Player Version Override(播放器版本覆盖):
覆盖用于制定远程目录名称的时间戳。如果设置,则远程目录命名为 。如果留空,则使用时间戳。
Compress Local Catalog(压缩本地目录):
在压缩的资产捆绑文件中构建目录。减小目录的存储大小,但增加构建和加载目录的时间。
Optimize Catalog Size(优化目录大小):
通过为内部 ID 创建查阅表格来减小目录的大小。可以增加加载目录所需的时间。

Content Update(内容更新)
Disable Catalog Update on Startup(启动时禁用目录更新):
禁用在可寻址系统在运行时初始化时自动检查已更新的远程目录。您可以手动检查更新的目录.
Content State Build Path(内容状态生成路径):
在何处生成由默认生成脚本生成的内容状态文件。
Build Remote Catalog(构建远程目录):
启用此选项可生成远程目录。
Build Path(构建路径):
生成远程目录的位置。通常,应使用远程构建路径 轮廓变量。
Load Path(加载路径):
用于访问远程目录的 URL。通常,您应该使用远程加载路径 轮廓变量。

Downloads(下载)
Custom certificate handler(自定义证书处理程序):
用于自定义证书处理的类。该列表包含项目中扩展的所有类UnityEngine.Networking.CertificateHandler.
Max Concurrent Web Requests(最大并发 Web 请求数):
系统会将超出此限制的任何请求排队。
Catalog Download Timeout(目录下载超时):
等待目录文件下载的秒数。

Build(构建)
Ignore Invalid/Unsupported Files in Build(忽略构建中的无效/不支持的文件):
如果启用,“可寻址”生成脚本将排除无效或不受支持的文件,而不是中止生成。
Unique Bundle IDs(唯一的捆绑 ID):
是否为每个构建中的捆绑软件生成唯一的名称。
Contiguous Bundles(连续捆绑包):
生成更高效的捆绑包布局。
Non-Recursive Dependency Calculation(非递归依赖关系计算):
计算不带递归的依赖关系。
Shader Bundle Naming Prefix(着色器捆绑包命名前缀):
如何命名为 Unity 着色器生成的捆绑包。
MonoScript Bundle Naming Prefix(单脚本捆绑包命名前缀):
如何命名包含单一脚本的捆绑包。
Strip Unity Version From AssetBundles(从资源捆绑中剥离 Unity 版本):
是否从捆绑包头中删除 Unity 版本。
Disable Visible Sub Asset Representations(禁用可见子资产表示):
启用此选项以缩短构建时间,如果您不直接使用子对象(子对象、子网格等)。

Build and Play Mode Scripts(构建和播放模式)
配置项目中可用的 IDataBuilder 脚本。如果创建自定义“生成”或“播放模式”脚本。
则必须先将其添加到此列表中,然后才能使用它。

Asset Group Templates(资产模板)
定义可用于创建新组的模板列表。创建新模板时,必须先将其添加到此列表中,然后才能使用它。

Initialization object list(初始化对象列表)
配置项目的初始化对象。初始化对象是实现 IObject 初始化数据源接口的可编写脚本的对象类。
您可以创建这些对象,以便在运行时将数据传递到可寻址初始化过程。

Group settings(组设置)
组设置确定如何在内容生成中处理组中的资产。例如,您可以指定构建 AssetBundle 的位置、捆绑压缩设置等。

Profiles(配置文件)
构建路径和加载路径的默认值为:
本地构建路径:[UnityEditor.EditorUserBuildSettings.activeBuildTarget]
本地加载路径:[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]
远程构建路径:ServerData/[BuildTarget]
远程加载路径:http://localhost/[BuildTarget]
BuildTarget(构建目标):
构建目标的名称,例如安卓或独立 Windows64。
Local Build Path(本地生成路径):
用于生成包含要随应用程序本地安装的资产的文件。默认情况下,此路径位于“项目库”文件夹中。
Local Load Path(本地加载路径):
加载随应用程序一起本地安装的资产的位置。默认情况下,此路径位于“流式处理资产”文件夹中。
可寻址内容会自动包括构建到流式处理资产中默认位置的本地内容,当您构建播放机时(但不包括从其他位置)。
Remote Build Path(远程生成路径):
用于构建包含计划远程分发的资源的文件。
Remote Load Path(远程加载路径):
从中下载远程内容和目录的 URL。

Asset Hosting Services(资产托管)
在开发期间使用托管服务时,请考虑创建一个配置文件,用于将资产组配置为从托管服务加载。
Customizing Addressables initialization(自定义初始化)
可寻址系统会在运行时首次加载可寻址或对可寻址 API 进行另一次调用时初始化自身。
调用可寻址器 InitializeAsync 以更早地初始化可寻址对象。
如果已经进行了初始化,则此函数不执行任何操作。
Addressables Groups(可寻址 组)
管理 Groups
打开“可寻址群组”窗口(菜单:Window -> Asset Management -> Addressables -> Groups)
以管理您的群组和可寻址资产。
创建 Groups
1. 打开“地址组”窗口。

2. 单击窗口顶部工具栏中的 “Create” 。
3. 选择 Group -> Packed Asset 以创建新组。(如果您已创建自己的组模板,它们也会显示在菜单中。

直接空白处右键也可以

4. 选择新组并打开其上下文菜单(右键单击)。

5. 选择重命名并分配所需的名称。(快捷键 F2)

6. 再次打开上下文菜单,然后选择 “Inspect Group Settings” 。

7. 根据需要调整组设置。
上面有详细参数解析,可以返回去看一下。

Addressables Labels(可寻址 标签)
您可以在 “Groups” 窗口中使用一个或多个标签来标记您的可寻址资产。
标签在可寻址系统中有一些用途,包括:
1. 可以使用一个或多个标签作为键来标识要在运行时加载的资产。
2. 您可以根据为资源分配的标签将组中的资源打包到资源捆绑中。
3. 您可以使用“组”窗口的筛选器框中的标签来帮助查找已标记的资源。
标签菜单
在标签窗口中创建和删除标签。从“Groups” 窗口工具栏上的 “Tools” 菜单中打开 “Labels” 窗口。

标签添加
1. 点击 “ + ”号。

2. 更改新建标签名称。注意 Sava 保存一下。

Unity基础应用 本地更新
Package Manager
在 Package Manager 中找到 Addressables 并下载(下载最新版就行)。

下载完毕之后 选中 Window-> Asset Management -> Addressables -> Groups 打开 Addressables 基础面板。

Addressables 基础面板

Addressables 资源操作
把你需要热更的预制件推拽到 Default Local Group 上面。

选中 更改名字(快捷键 F2)。注意这个名字,是后续加载的 key 值。

Addressables 配置文件
在 Addressables 基础面板 打开 Manage Profiles。

一共包含五个属性:
构建目标:不用改就行。
本地构建路径:因为我这里是本地构建的所以更改了路径。
本地加载路径:同上。
远程构建路径:看需求吧,如果你有服务器的话也可以。
远程加载路径:同上。

Addressables 检查设置
在 Addressables 基础面板 选中 Default Local Group 点击 Inspect Top Level Settings。

勾选 Build Remote Catalog:构建远程。
更改 Build Path:构建路径。
更改 Load Path:加载路径。

Addressables 输出
输出 Addressables 文件。

这是输出到文件夹的结果。

Unity 打包测试
打包测试。
打包之前最好先在编辑器环境下看看是否能够正确加载。

基础脚本:随便搭载到场景物体上就行。最好还是规范一点。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
public class HotUpdateTest_ZH : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
Addressables.InstantiateAsync("Test", new Vector3(0, 1.4f, 0), Quaternion.identity);
}
if (Input.GetKeyDown(KeyCode.Escape))
{
Application.Quit();
}
}
}
没有按下 R 键之前

按下 R 键 加载正确

Addressables 文件更新
1. 选中原来的寻址文件删除。
2. 添加新的预制体文件。
3. 更改名称,注意这里的名称 Key 值不要变更,否则无法加载。

更新 寻址文件。

一般都在项目文件夹下的 Windows 文件夹下。


重新运行 执行文件。
发现刚刚更新的Addressables 文件已经正确加载了。

Addressables 问题
是有很多小捆绑包还是几个大包更好?
捆绑包过多的危险:
1. 每个捆绑包都有内存开销。
2. 下载捆绑包有并发限制。如果您有 1000 个捆绑包需要一次全部,则不能同时下载它们。
3. 捆绑包信息可能会使目录膨胀。
4. 更有可能出现重复的资产。
捆绑包太少的危险:
1. UnityWeb 请求(我们用于下载)不会恢复失败的下载。
2. 物料可以从捆绑包中单独装入,但不能单独卸载。
哪些压缩设置是最好的?
捆绑包太少的危险:
1. Uncompressed 未压缩:此选项在磁盘上最大,通常可快速加载。
如果您的游戏碰巧有空余空间,则至少应考虑将此选项用于本地内容。
2. LZ4 :如果“未压缩”不是一个可行的选项,则应将 LZ4 用于所有其他本地内容。
这是一种基于块的压缩,它提供了加载部分文件而无需完整加载文件的能力。
3. LZMA - LZMA:应用于所有远程内容,但不适用于任何本地内容。它提供最小的捆绑包大小,但加载速度很慢。
如果要将本地捆绑包存储在 LZMA 中,则可以创建较小的播放器,但加载时间将明显比未压缩或 LZ4 差。
请注意,平台的硬件特征可能意味着未压缩的捆绑包并不总是加载速度最快的。
加载未压缩捆绑包的最大速度由 IO 速度控制,而加载 LZ4 压缩捆绑包的速度可以通过 IO 速度或 CPU 进行控制,
具体取决于硬件。在大多数平台上,加载 LZ4 压缩的捆绑包受 CPU 限制,加载未压缩的捆绑包会更快。
有没有办法减小目录大小?
1. 压缩本地目录。如果您主要关心的是构建中的目录有多大,则检查器中有一个选项用于压缩本地目录的顶级设置。
2. 禁用内置场景和资源。可寻址文件提供了从资源和内置场景列表中加载内容的功能。
默认情况下,此功能处于打开状态。
什么是addressables_content_state.bin?
该文件将保存到附加了 “/” 的 “Addressable Assets Settings (可寻址资产设置)”
中的 “Content State build Path(内容状态构建路径)”中定义的文件夹路径中。
可能的规模影响是什么?
1. 总捆绑包大小 - 以前 Unity 不支持大于 4GB 的文件。
2. 影响UI性能的子资产 - 这里没有硬性限制,但是如果你有很多资产
并且这些资产有很多子资产,那么最好关闭子资产显示。
该选项位于“Tools > Groups View > Show Sprite and Subobject Addresses”下的组窗口中。
3. 组层次结构显示 - 另一个帮助缩放的仅限 UI 的选项是 Group Hierarchy with Dashes.。
4. 大规模捆绑包布局。
使用什么资产加载模式?
对于大多数平台和内容集合,建议使用 。此模式将仅加载 使用 或 请求的资产所需的内容。
这可以防止将资产加载到未使用的内存中的情况。
编辑加载的资源是否安全?
编辑从捆绑包加载的资源时、在播放器中使用“使用现有构建(需要构建的组)”播放模式设置时。
资源从捆绑包加载,仅存在于内存中。更改无法写回磁盘上的捆绑包,并且对内存中对象的任何修改
不会在会话之间保留。
使用“使用资源数据库(最快)”或“模拟组(高级)”播放模式设置时,情况有所不同,在这些模式下
资源是从项目文件加载的。对加载的资源所做的任何修改都会修改项目资源,并保存到文件中。
是否可以在运行时检索资产或引用的地址?
在最一般的情况下,加载的资产不再与其地址绑定。但是,有一些方法可以正确关联并使用它来读取字段 PrimaryKey。
我可以在重新编译脚本时构建可寻址文件吗?
如果您有触发域重新加载的预构建步骤,则必须特别注意,在域重新加载完成之前,可寻址构建本身不会启动。
无法正确加载可能
如果出现无法加载的问题查询一下是否是:构建路径或者加载路径不正确的问题。

暂时先这样吧,如果有时间的话就会更新,实在看不明白就留言,看到我会回复的。 路漫漫其修远兮,与君共勉。
|