无法加载缓存的AssetBundle。已从另一个AssetBundle加载了同名文件

时间:2013-06-05 11:37:02

标签: c# unity3d

我正在尝试加载一个场景,但是我从标题中得到错误而我根本不知道为什么因为我在AssetBundle上调用Unload(false)。有人能帮我吗?感谢。

void Start() {
...
 StartCoroutine (DownloadAndCache());
...
}

IEnumerator DownloadAndCache (){
    // Wait for the Caching system to be ready
    while (!Caching.ready)
        yield return null;

    // Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache
        using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){
            yield return www;

            if (www.error != null)
                throw new Exception("WWW download had an error:" + www.error);
            AssetBundle bundle = www.assetBundle;

            bundle.LoadAll();

            AsyncOperation async = Application.LoadLevelAsync("main");
            Debug.Log (async.progress);
            yield return async;

            bundle.Unload(false);
        }
}

1 个答案:

答案 0 :(得分:2)

如果您不想使用Unload()函数,请在使用资产包后清除缓存: -

Caching.CleanCache();

并且每件事情都能正常工作,但是每次在捆绑使用后清除缓存时都必须下载资产包。

或者你可以这样做

首先在Start()函数中调用 DoNotDestroyOnLoad()(用于保持引用)函数,并在使用时创建一个静态变量来存储资产包的引用WWW.LoadFromCacheOrDownload 下载资产,分配对静态变量的引用,并在使用后卸载资产。如果您没有卸载资产包并再次使用WWW.LoadFromCacheOrDownload,则会抛出相同的错误。

假设您是否使用资产包加载了一个场景,那么在退出场景之前,请卸载存储在该静态变量中的资产包参考。这就是为什么使用静态变量以便我们可以从任何脚本访问它并在我们想要小心版本时卸载它。

class LoadScene:MonoBehaviour{
 ***public static AssetBundle refrenceOfAsset;***
 private AssetBundle assetBundle;

void Start(){
***DoNotDestroyOnLoad(gameObject);*** }
protected IEnumerator LoadTheScene()
{
    if (!Caching.IsVersionCached(url, version)){
        WWW www = WWW.LoadFromCacheOrDownload(url, version);
        yeild return www;  assetBundle = www.assetBundle;
        ***refrenceOfAsset = assetBundle;*** 
        www.Dispose();
        // Do what ever you want to do with the asset bundle but do not for get to unload it 
        refrenceOfAsset.Unload(true);
        }
    }
    else{
        Debug.Log("Asset Already Cached...");
        if(refrenceOfAsset!=null)
        refrenceOfAsset.Unload(true);
    }

}

或者你可以访问团结http://docs.unity3d.com/Manual/keepingtrackofloadedassetbundles.html