​​​​​​​Error while downloading Asset Bundle: CRC Mismatch

今天游戏开发中遇到了下面一个报错,原因就是ab的CRC验证不通过。
Error while downloading Asset Bundle: CRC Mismatch. Provided d2fb9a64, calculated f1e8f13f from data. Will not load AssetBundle 'https://www.baidu.com/master/cn/0.0.30/8003915e55faa95c443a5bd31020dcdb.bundle'

出现bug的原因就是本地已经有这个文件,但本地文件与远端文件不一样,当然crc也不一样。加载时候传入的crc是远端文件的crc,但实际加载的时本地的文件。
所以我们要确保:文件内容变化的时候,bundleHash也要变化,也就是说本地缓存的文件的路径也会变化。就可以解决上述bug。

​ 项目用的是Unity Addressable​实现的资源管理,下图是Addressable中调用UnityApi的加载逻辑

UnityApi中

 UnityWebRequestAssetBundle.GetAssetBundle(url, cachedBundle, crc);

这行代码加载assetbundle是根据cachedBundle的bundleName和bundleHash判断本地目录(AppData\LocalLow\Unity\companyname_producename\bundleName\bundleHash)下是否存在相应文件,如果存在就直接从本地加载,如果不存在再去远端下载,下载完会自动存到(AppData\LocalLow\Unity\companyname_producename\bundlename\bundlehash)本地这个目录。

以下是测试代码:

​​​​​​​private static System.Collections.IEnumerator Test()
{
    string url = "https://www.baidu.com/master/cn/0.0.30/8003915e55faa95c443a5bd31020dcdb.bundle";
    uint crc = 3539704420U;
    string bundleName = "bundle_name_aabbccdd";
    string bundleHash = "8003915e55faa95c443a5bd31020dcdb";
    CachedAssetBundle cachedBundle = new CachedAssetBundle(bundleName, Hash128.Parse(bundleHash));
    bool cached = Caching.IsVersionCached(cachedBundle);
    UnityEngine.Debug.Log($"cached={cached}");
    var request = UnityWebRequestAssetBundle.GetAssetBundle(url, cachedBundle, crc);
    request.SendWebRequest();
    while (!request.isDone)
    {
        yield return null;
        UnityEngine.Debug.Log(request.downloadProgress);
    }
    UnityEngine.Debug.Log("error = " + request.error);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值