1

我正在尝试加载场景,但我从标题中得到错误,我根本不知道为什么,因为我在 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);
        }
}
4

1 回答 1

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

于 2016-05-31T13:53:15.330 回答