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热更新想法

猜你喜欢

转载自blog.csdn.net/weixin_42186644/article/details/118002284