异常:
Unable to move cache folder ‘C:/Users/xxxx/AppData/LocalLow/Unity/WebPlayer/Cache/Temp/06146bcebf163c745b0d1470f3fa175b’ to ‘C:/Users/cmdsz/AppData/LocalLow/Unity/WebPlayer/Cache/xxxx/e2ff6a1826aff99c13b7f786274d3c41ba1b2510’: error code - 9
截图:
很多人说用Caching.ready 来判断,其实不然 例如
这个问题是由于已经出现一个AssetBundle被UnityWebRequest多次加载,前一个加载完成之后展开至缓存目录,同时在目录下建立一个名为 “__lock” 的空文件夹,作为文件锁,在AssetBundle.Unload()之前,这把锁一直存在,想调用Unity底层的缓存函数时,就会出现以上异常。
缓存封装了四个步骤
1:如果对应hash128 或者versionID的 AssetBundle已经被缓存,则从缓存中直接加载
2:如果没有缓存,则从指定URL下载并展开至缓存目录的一个临时目录
3:从临时目录拷贝至缓存目录(可以在运行时读取这个变量UnityEngine.Application.temporaryCachePath)
4:为展开的AssetBundle上锁(程序退出或者AssetBundle被卸载后,锁被解开)
如果你的代码是同时请求加载多个AssetBundle并且加载他们的依赖,然后再统一等待所有加载完成,那你就要注意,在调用用UnityWebRequest.GetAssetBundle(bundleUrl,BundleHash128,version) 之前,判断是否已经启动一个异步的加载,我的代码如下,完美解决
搞定