前言
最近在学习Addressable相关的内容,大概翻了翻文档,也查阅了一大堆资料,对其算是入门了。
这里记录一下遇到的坑和一些关键问题的解决方案
一、资源版本管理
addressable自身是没有版本管理这个概念的。
官方提供了一个CCD的解决方案,可以直接进行版本管理,这里给一个链接:Unity官方CCD介绍
那么我们如果要自己做一个版本管理,应该怎么做呢?这里不实际给代码了,只提供思路。
首先我们需要一个版本号,这个版本号有以下作用:
判断更新: 若玩家当前的资源版本低于服务器版本,则弹出资源更新提示,玩家点击后可进行更新
版本切换:可以自由切换到各种版本
基本思路
1、addressable基本围绕catalog来进行资源检测,所以我们要做的就是给catalog添加上版本号的绑定。
2、我们可以选择catalog的生成路径和data的生成路径。我们将资源生成到一个公共文件夹内,这样我们就有了一份能够增量的资源了。
3、接着我们将catalog放在上层目录,并称其为’母catalog’,因为如果是update更新的话,需要对应 ‘母catalog’ 文件,所以我们所有的版本都是由 ‘母catalog’ copy而来。
4、我们每次生成或更新catalog时,记作一个版本,然后新增一个对应版本的文件夹,并将我们打好的 ‘母catalog’ copy 到对应版本文件夹中。
5、每次更新版本时,我们的版本号修改,并同步至服务器。
5、客户端每次初始化时,请求服务器当前最新的版本号,并记录。
6、读取catalog时 使用动态路径,动态路径中添加版本号信息。
这样每次当客户端进行下载时,会去比较catalog,发现有变动后,会进行下载和更新,从而实现了最基础的版本管理(当然还会有很多问题,但勉强能使了)。
PS:如果不嫌麻烦的话,也可以修改默认打包模式,直接生成版本号信息,再加上拷贝等操作,这样就不用手动拷了。
二、清理缓存文件
说明:在完成更新后,需要清理掉无引用文件。
Addressable在1.19.4的版本中,给updatecatalog函数中,新增了一个名为autoCleanBundleCache的可选参数,该参数使用后,可以清除无引用缓存。
坑:在实际使用中,我一共试了3个平台:Editor、PC、Android,除了Editor以外的2个平台,都会出现一个缓存未准备好的错误。 发现AA在清理缓存时,并没考虑到准没准备好这件事。。
解决方案:先等待缓存准备好,然后在调用updatecatalog函数。
总结
先写这点吧,之后可能会补上自动打包策略和校验本地完整性问题,还有一些奇怪的坑,想到了也会写过来,算是做个记录吧。