基于Addressable实现资源版本管理 (一)


前言

最近在学习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函数。

总结

先写这点吧,之后可能会补上自动打包策略和校验本地完整性问题,还有一些奇怪的坑,想到了也会写过来,算是做个记录吧。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值