Addressable使用指南
安装过程跳过
测试工程地址:https://gitee.com/164989730/addressable.git
远程更新配置设置
Disable Catalog Update on Startup : 关闭启动时,自动更新Catalog文件
Build Remote Catalog 开启远程构建模式,勾选之后就会出现 Build & Load Paths 选项了
Build & Load Paths 选择Profile的地方,选Remote 或者自定义的Profile

Build选项说明
New Build 打首包的,重新打包
Update a Previous Build 在首包基础上打增量包
Clear Build 一些清除打包缓存等的选项

编辑器运行选项说明
Use Asset Database(fastest)直接使用本地资源,不用创建 AB包就能直接运行
Simulate Groups(advanced) 模拟Group 分组,可以分析资源依赖问题,不用创建 AB 包
Use Existing Build(requires built groups)从 AB 包加载资源,要构建AB 包

几个路径的说明
Remote.LoadPath:cdn资源路径
Remote.BuildPath: 打包时资源导出路径
Library/com.unity.addressables 编辑器下 首包打完之后存放在这里
更新后的catalog.hash和catalog.json 存放路径 : Application.persistentDataPath
更新后的资源本地缓存路径:
Library/com.unity.addressables/aa/{AddressablesPlatform}/aa/{RuntimePlatform}/xxx.bundle
本地资源变化
1、点下 New Build (重新构建,打首包)
Remote.BuildPath 目录下,产生首包的文件
hash值为 540b446608f157ce50afa467132cc3d7

Library目录下,生成首包相关文件
这个Bundle 是首包资源??

Application.persistentDataPath路径下为空的
2、不复制Remote.BuildPath的文件到 Remote.LoadPath下,首包直接运行
加载两个物体,红色是方块,蓝色是球
编辑器下加载成功

非编辑器下会直接报错,无法加载

3、复制Remote.BuildPath下的文件到Remote.LoadPath下,再次运行
加载成功了

4、修改红方块也变成球,然后直接运行
还是方块,也侧面说明用的不是原始资源了

5、打增量更新包之后,目录变化
Remote.BuildPath目录下多出来一个prefab的bundle,因为我们只改变了prefab,所以只有一个新的bundle,大小都是3kb
hash值也发生了变化 3003e440e70efff1409f460f2a80a2fe

其他目录没变化
6、直接运行
编辑器下直接报错,在Remote.LoadPath找不到这个资源

非编辑器下,刚才首包导出的工程,加载出了旧的资源

目录没有变化
7、复制替换Remote.BuildPath下的文件到Remote.LoadPath下,再次运行
直接加载资源,由于我们勾选了Disable Catalog Update on Startup,所以运行之后是不会自动检测更新的


8、检查更新
CheckForCatalogUpdates 进行检测Catalog文件是否发生变化,对比hash值
async Task CheckUpdate()
{
catalogs.Clear();
var check = Addressables.CheckForCatalogUpdates(false);
await check.Task;
if (check.Status == UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationStatus.Succeeded)
{
catalogs.AddRange(check.Result);
if (catalogs != null && catalogs.Count > 0)
{
Debug.Log("有更新");
}
else
{
Debug.Log("没有更新");
}
}
Addressables.Release(check);
}
编辑器下直接就生效了,红色变小球了

非编辑器下,没有发生变化

Application.persistentDataPath路径下,依然为空

9、更新catalogs
执行Addressables.UpdateCatalogs,对catalogs文件进行更新
async Task UpdateCatalogs(List<string> catalogs)
{
updateList.Clear();
if (catalogs.Count > 0)
{
var updateCatalogs = Addressables.UpdateCatalogs(catalogs, false);
await updateCatalogs.Task;
Debug.Log("更新数量:" + updateCatalogs.Result.Count);
if (updateCatalogs.Result != null && updateCatalogs.Result.Count > 0)
{
foreach (var locator in updateCatalogs.Result)
{
foreach (var key in locator.Keys)
{
updateList.Add(key);
Debug.Log("更新内容:" + key);
}
}
}
Addressables.Release(updateCatalogs);
}
}
编辑器下更新内容

也还是红色小球

Application.persistentDataPath路径下,出现了catalog.hash 合 catalog.json文件
hash值为 3003e440e70efff1409f460f2a80a2fe 就是远程目录更新后的文件

非编辑器下,我们先删掉编辑器缓存的hash文件,然后更新
更新内容

成功创建出红色小球

Application.persistentDataPath路径下,也出现了catalog.hash 和 catalog.json文件
hash值为 3003e440e70efff1409f460f2a80a2fe 就是远程目录更新后的文件

10、现在已经更新完毕了,删掉远程资源会怎么样
移除远程资源之后,重启程序,编辑器下,依然可以正常加载红色小球

非编辑器下,也可以成功加载小球

因为我们已经更新完毕了,本地已经存在了一份资源
11、怎么回退到之前的版本
还有一个目录是用来保存缓存的资源的
这些就是本地缓存的资源,下图是非编辑器的,编辑器是 Cache/Unity/com.xxx.xxxx

非编辑器下,加载失败了

13、删掉缓存,恢复首包的远程文件
红球变成方块了。回退到上个版本了

14、再次删掉缓存,远程文件使用增量之后的红球版本
也成功加载出了红球

1367

被折叠的 条评论
为什么被折叠?



