2013-06-05 1 views
1

Я пытаюсь загрузить сцену, но я получаю сообщение об ошибке из заголовка, и я просто не знаю, почему, потому что я вызываю Unload (false) в AssetBundle. Кто-нибудь может мне помочь? Благодарю.Не удается загрузить кешированный AssetBundle. Одноименный файл уже загружен из другого AssetBundle

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); 
     } 
} 
+0

В какой строке все же происходит ошибка? Является ли уровень 'main' содержащимся в комплекте? – Kay

+1

Я «решил» (НЕ) проблему. В Unity 4.1.2 загрузка сцены из AssetBundle падает, когда я останавливаю игру. Подробнее здесь http://answers.unity3d.com/questions/382154/problem-in-loading-scene-from-asset-bundle.html#comment-469348 и здесь http://answers.unity3d.com/questions/ 373556/как-может-я-стоп-мой-редактор из-сбою-каждый-i.html – ahsoka

ответ

2

, если вы не хотите использовать функцию Unload() очистить кэш после того, как используется пакет активов: -

Caching.CleanCache(); 

И каждый все будет работать нормально, но вы должны загрузить пакет активов каждый когда вы очищаете кеш после использования пакета.

Или вы можете сделать это путь

Прежде всего вызова DoNotDestroyOnLoad() (для сохранения ссылки через выход) функцию Start() функции и создать статическую переменную для хранения ссылки расслоения активов когда вы используете 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