2017-06-29 1 views
0

Ich beginne mit den Fehlern selbst. Die erste ist: Assertion auf die Expression fehlgeschlagen: 'm_UncompressedBlocksOffsets [blockInd] < = von + dstPos & & m_UncompressedBlocksOffsets [blockInd] + uncompressedBlockSize> = von + dstPos' UnityEngine.AssetBundle: Loadfrom (String)Fehler Laden Assetbundle in Einheit

Gefolgt von: fehlgeschlagen Daten für das AssetBundle 'D: /Unity/projects/PQv0.10/Assets/AssetBundles/spritesbundle' dekomprimieren. UnityEngine.AssetBundle: LoadFromFile (String)

Ich habe immer nur den Ressourcenordner für meine Projekte verwendet, aber mein aktuelles Projekt ist überfordert, was diese Methode aufnehmen kann. Also versuche ich Assets (in diesem Fall 5000 Sprites) in ein Assetbundle zu laden und sie zur Laufzeit zur Laufzeit zu laden. Ich dachte mir, ich könnte einfach einen Verweis auf das Assetbundle bekommen und dann Assetbundle.LoadAsset (Assetname) aufrufen und meine alten Resources.Load-Aufrufe ersetzen. Hier ist mein Versuch, die assetbundle Referenz zu machen, die erroring hält:

AssetBundle sprites; 
void loadSprites() 
{ 
    sprites = AssetBundle.LoadFromFile(Application.dataPath + "/AssetBundles/spritesbundle");    //   " + bundleName); 
    if (!sprites) { 
     Debug.Log("failed to load assetbundle"); 
    } 
} 

Für Due Diligence, hier ist auch der Code, den ich verwendet, um dieses assetbundle zu erstellen. Es einfache Suche mein Projekt für png und packt sie in die assetbundle:

public static void SaveSpecificAssets() 
{ 
    AssetBundleBuild build = new AssetBundleBuild(); 
    build.assetBundleName = "spritesBundle"; 

    string[] files = AssetDatabase.GetAllAssetPaths(); 
    List<string> validFiles = new List<string>(); 
    foreach (string file in files) 
    { 
     if (file.EndsWith(".png")) validFiles.Add(file); 
    } 

    build.assetNames = validFiles.ToArray(); 

    BuildPipeline.BuildAssetBundles("Assets/AssetBundles", new AssetBundleBuild[1] { build }, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); 
} 

Die assetbundle baut ohne Fehler und erscheint in dem Verzeichnis, in dem es sein sollte. Ich habe keinen Hinweis darauf, dass es fehlerhaft ist, abgesehen von den Fehlern, die ich bekomme, wenn ich versuche, es zu laden. Das Manifest, das es generiert, enthält entsprechende Elemente, so denke ich, dass es mindestens so funktioniert wie beabsichtigt. Wenn ich relevante Informationen vermisse, bitte zeig es und ich werde versuchen es zu liefern.

dies ist der Test Koroutine ich anstelle von loadSprites() verwendet für die Prüfung, ob es einen Unterschied gemacht:

IEnumerator testLoader() 
{ 
    WWW www = WWW.LoadFromCacheOrDownload("file:///" + Application.dataPath + "/AssetBundles/spritesbundle", 1); 
    yield return www; 

    sprites = www.assetBundle; 
} 

Antwort

1

dies versuchen, für alle PNG in Ihrem Projektordner, wählen sie alle und sie hinzufügen zu einem AssetBundle über den Editor, bauen dann nur

BuildPipeline.BuildAssetBundles("Assets/AssetBundles",BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); 

Dann versuchen sie sich mit dem Bündel zu laden und sehen, ob es einen Fehler zeigt.

Schauen Sie auch in die Manifest, um zu sehen, ob alle Dateien, die Sie

+0

Das Manifest sieht angemessen aufgeführt bestimmt. Die Verzeichnisse für Dateien erscheinen alle dort, wo sie sein sollten. – oxrock

+0

Ich weiß, dass es veraltet ist, aber versuchen Sie, das Asset-Paket mithilfe der WWW-Klasse in Unity zu laden. –

+0

Ich schrieb eine schnelle Test-Coroutine, nach ein paar Sekunden es mit dieser Nachricht ausgibt: "Sie versuchen, Daten aus einem www-Stream zu laden, der den folgenden Fehler beim Herunterladen hatte. Dekomprimieren der Daten für die AssetBundle-Datei:///D:/Unity/projects/PQv0.10/Assets/AssetBundles/spritesbundle '. URL: Datei: /// D: /Unity/projects/PQv0.10/Assets/AssetBundles/spritesbundle UnityEngine.WWW: get_assetBundle () " – oxrock

Verwandte Themen