广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机教程 > 正文

Addressable怎么删除旧资源?_惠州IT培训

作者:邓华发布时间:2020-12-03分类:计算机教程浏览:1506


导读:Addressable怎么删除旧资源?关于这个问题,惠州北大青鸟学术部老师是这样说的。

Addressable怎么删除旧资源?关于这个问题,惠州北大青鸟学术部老师是这样说的。


一、目前计划使用Addressable来实现资源热更新,实际真机测试发现当资源更新后,旧的资源Addressable并不会把它删除,同时可以看到App占用的数据文件会越来越大。请问有什么办法可以把指定的Group或Label的资源删除吗?

试了Addressable.ClearDependencyCacheAsync也不行。实际测试这个接口只能删除最新版本的资源。当本地已经是最新版本资源时这个接口确实有效;但是如果本地需要更新资源时,这个接口应该也是尝试去删除最新资源,然而本地并没有最新版的资源,所以大概就无效了。

A:调用Addressable.ClearDependencyCacheAsync实质是调用了 “Caching.ClearAllCachedVersions();”。事实上是使用了Unity的Caching系统。

在Windows编辑器环境测试了一下。
Caching的目录为“C:\Users\UserName\AppData\LocalLow\Unity\ProjectFolder”,当正常下载AssetBundle以后,该目录内就出现 “stage01_298bd883434eedb69ea7316cb23e0b0d\662ab7a0d2aa99bc7a2dbb7baec63872” 之类的目录,并保存着当前的AssetBundle版本,当更新AssetBundle并执行下载以后,该目录也会出现其他AssetBundle的Caching目录。

在执行下载之前,先执行了一下“Caching.ClearCache();”,这时会发现Caching目录内已经被清空,所有版本的AssetBundle都没有了。下载完成后,该目录只保留了最新的AssetBundle资源。由此可推,即使不通过Addressable系统,仍然可以通过Caching把所有的资源都清理掉。

于是继续进行第二个实验,连续更新几次AssetBundle以后,Caching目录内已经有多个版本的AssetBundle目录了,当有新的更新后执行 “Addressables.ClearDependencyCacheAsync(key);”,发现的确并没有将旧版本的AssetBundle都删除。因为“Caching.ClearAllCachedVersions”的参数是对应的AssetBundle名字,而Addressables的管理AssetBundle包名是带Hash的,因为每个版本的AssetBundle文件名都不一样的,Caching系统也就无法分辨了。

继续做实验,将打包名字去掉Hash,Caching目录内的AssetBundle目录名也不带Hash了,然后连续更新几个版本后发现,该AssetBundle目录内多了几个不同Hash版本的目录,内部才是真正的AssetBundle。于是走“Addressables.ClearDependencyCacheAsync(key)”,这时就能正确地删除旧版本,然后再更新新版本了。


二、请问下不勾选Hash其实就不用清除了吧?名字一样不是会直接覆盖吗?

A:不勾选Hash,只是在Cache的目录内第一级资源同名子目录是一致的,但是里面保存具体数据的子目录是递增的,因为有不同版本。每个版本都会有一个子目录。这个是Caching系统管理的。


三、确实不勾选Hash打包可以成功删除了,这种方式貌似就是覆盖式的打包,不知道会不会有其他隐患,目前来看够用。

A:隐患就是如果按照Label来做更新检查,本来可以只下载差异部分,但是因为同样使用Label做清除Caching的工作就会造成重复下载原本不必要更新的部分。于是就需要遍历所有的Location然后去检查更新,并将有更新的AssetBundle放入列表,然后再依次清除旧缓存,重新下载。这样就和传统方案没太大区别了。


标签:惠州北大青鸟北大青鸟惠州IT培训IT培训学IT


计算机教程排行
标签列表
网站分类
文章归档
最近发表