The AssetBundle ‘xxx‘ can‘t be loaded because another AssetBundle with the same

       The AssetBundle 'journeyweekend3_2.asset' can't be loaded because another AssetBundle with the same files is already loaded。

       项目在调用AssetBundle.LoadFromFileAsync接口时报了上面的错误.

       上面这种错误提示,网上很多说法是不同目录下存在同一个assetbundle文件,两个都加载时会报上面的错误,但是我在项目中确定了没有两个同名文件,但还是报了上面的错误,冥思苦想而不得其解,后来经过仔细分析,终于最后搞定了。

       项目中的实际情况是这样的,UI在显示时,有的图片并非来自安装包,而是需要从资源服务器进行下载,下载完毕后再把图片设置到UI上。那么这个AssetBundle包(里面只有一张图片)就是从资源服务器上下载的,但下载完毕后会触发一个下载完毕的事件,那么UI在监听到这个事件后会设置UI上的图片,该图片来自上面的AssetBundle包,此时UI收到下载完毕的监听事件后会立马加载并解析刚刚下载好的AssetBundle包,此时加载此AssetBundle包时报了上面的错误。

        发生上述错误的原因是下载完毕和加载AssetBundle包是在同一帧进行的,其实在下载完毕时AssetBundle包内容是存在内存的,此时需要在本地磁盘创建文件对其进行写操作,将AssetBundle包内容写入到这个文件里,由于这个时候文件系统没有完全释放,内存里其实还存在一份AssetBundle文件,此时再调用AssetBundle.LoadFromFileAsync接口时,会认为此文件已经被加载了,所以会报上面的错误。

       解决办法:

        在调用AssetBundle.LoadFromFileAsync接口前等待文件系统释放完毕即可,可在调用此接口前加上yield return new WaitForSeconds(0.1f)即可,试过等待一帧还是会报错,所以就等待了0.1秒,然后顺利解决问题,在此记录一下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值