Addressable热更新问题集......

Posted 2080.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Addressable热更新问题集......相关的知识,希望对你有一定的参考价值。

文章目录

旧资源如何删除?

背景

使用Addressable实现资源热更新,实验过程中发现,当资源更新后,新的资源包并不会直接覆盖原有资源包,而是会生成新的资源包后,旧的资源累积在本地,迭代的版本多了,自然而然的占用大部分空间

解决过程

本地新建资源分组,勾选Build和load路径,Play Mode Script模式选择Using Existing Build,首次打包选择Build - New Build - Default Build Script即可,日后更新资源,操作Build - Update a previous Build即可。使用脚本在下载热更新资源包后(此处Unity是在android平台),Cache系统会将下载资源存放到C:\\Users\\用户名\\AppData\\LocalLow\\Unity\\项目名称\\,迭代几个版本后,发现旧的资源包并没有被删除

方法

(1)上述测试发现旧的资源包并没有被删除,首先尝试了Caching.ClearCache();方法,在迭代了多个版本后,下载新的资源包之前,我先执行了该方法,之后再下载资源包,发现目录下面只保留最新的资源包,因此我们可以使用该方式删除旧资源包,同时我们应注意删除的时机,确保新的资源包下载完成,再去删除,以防删除旧资源包后,新的资源包因某些原因下载失败。
(2) Addressable官方给我们提供了Addressables.ClearDependencyCacheAsync(key)方法删除旧的资源包,同样迭代多个版本后,在更新新的资源包前执行该方法删除旧包,但是发现旧资源包并未被删除。对比多个资源包的名称发现,每个AB包名称都是不一样的,但是Addressables.ClearDependencyCacheAsync(key);内部删除AB包的参数是对应的AB名字,而Addressables的管理AB包名是带hash的,导致包名不同,因此Caching系统无法分辨删除旧资源,另外我们传入的key更多是资源的lable标签和资源名称。
尝试去取消HASH管理包名,在资源组的Content Packing & loading Schema中更改Bundle Naming属性为FileName,再次打包并更新下载,我们会发现Cache目录下文件结构为资源组名称/f15e74549e6c89fc596e56f7abb3d4de之类的,随后我们再尝试在下载更新前,删除旧资源包,发现能够正常删除了。

热更新思路和删除旧资源包用法参考上篇Addressable热更新想法

以上是关于Addressable热更新问题集......的主要内容,如果未能解决你的问题,请参考以下文章

Unity 之 Addressable可寻址系统 -- 资源热更新 -- 进阶

Unity资源热更新--资源管理Addressable

Unity热更模块基于 HybridCLR + Addressable

游戏开发探究Unity Addressables资源管理方式用起来太爽了,资源打包加载热更变得如此轻松(Addressable Asset System | 简称AA)

游戏开发探究Unity Addressables资源管理方式用起来太爽了,资源打包加载热更变得如此轻松(Addressable Asset System | 简称AA)

游戏开发探究Unity Addressables资源管理方式用起来太爽了,资源打包加载热更变得如此轻松(Addressable Asset System | 简称AA)