tuyoogame / YooAsset

unity3d resources management system
https://www.yooasset.com/
Apache License 2.0
2.37k stars 466 forks source link

关于微信小游戏AB缓存问题 #351

Open klpk opened 2 weeks ago

klpk commented 2 weeks ago

最近项目要试水一下微信小游戏,接入根据文档设置了YooAssets.SetCacheSystemDisableCacheOnWebGL() 项目打bundle时使用的是纯32个字符的hashname作为bundle名字。 但看日志是有显示命中缓存了,想了解一下YooAsset是怎么使用到了微信的缓存的,纯hashname作bundle名字是没有问题的吧。 看微信本身配合Unity原生的bundle接口是需要bundle如果纯hashname的话,同一目录下的好像就变成同一个资源定位符号了

微信的文档中是这么说的:

当使用以下API发起网络请求时会检查是否需要缓存,以及是否命中缓存。

UnityWebRequest WWW UnityWebRequestAssetBundle Addressables 游戏业务侧无需关心资源是否有缓存,按照本地没有缓存来使用,正常调用API即可,当有缓存时,Loader插件会构造正常响应返回给游戏

识别业务资源版本

框架不会做额外计算来验证资源版本,通过文件名中带资源hash,可以在资源更新时,识别不同版本的资源。

以Addressables为例,打包参数加上BuildAssetBundleOptions.AppendHashToAssetBundleName,会携带32位长度的hash拼接到文件名末尾。

默认hash长度为32,可通过bundleHashLength修改。等同于修改导出插件面板的Bundle名中Hash长度

以下几种命名都能识别到版本号8d265a9dfd6cb7669cdb8b726f0afb1e eg1: font_8d265a9dfd6cb7669cdb8b726f0afb1e

示例

假设有以下配置

  1. DATA_CDN: https://weixin.qq.com/webgl
  2. bundlePathIdentifier: ['StreamingAssets']
  3. bundleHashLength: 32 在写入缓存前需要经过三步

根据URL生成缓存路径 URL剔除掉DATA_CDN部分后作为缓存路径 例如: DATA_CDN=https://weixin.qq.com/webgl 资源下载URL=https://weixin.qq.com/webgl/StreamingAssets/textures_8d265a9dfd6cb7669cdb8b726f0afb1e 那么:

则缓存路径=${wx.env.USER_DATA_PATH}StreamingAssets/textures_8d265a9dfd6cb7669cdb8b726f0afb1e 资源唯一标识=StreamingAssets/textures 资源版本=8d265a9dfd6cb7669cdb8b726f0afb1e 注意:资源实际部署的CDN前缀必须与转换面板填写的CDN地址一致,否则无法按照前文的缓存规则获得资源的唯一标识。导致缓存失败

gmhevinci commented 2 weeks ago

微信小游戏平台,推荐使用YOO2.2x版本。 这里是接入细节:https://www.yooasset.com/docs/Solution#%E5%BE%AE%E4%BF%A1%E5%B0%8F%E6%B8%B8%E6%88%8F%E6%94%AF%E6%8C%81%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88