Jump to content
Unity Insider Forum

AssetBundle Scene nachladen


Alexfedel

Recommended Posts

Kann mir jemand sagen, warum Unity keine ".unity3d" Dateien über die WWW Klasse nachladen kann?

Ich erzeuge ein AssetBundle über:

string[] level1 = new string []{"Assets/Scenes/scene1.unity"};
BuildPipeline.BuildStreamedSceneAssetBundle( level1 , "Assets/Bundles/scene1.unity3d", EditorUserBuildSettings.activeBuildTarget);

 

Und dann möchte ich dieses Bundle per WWW download = new WWW(url) runterladen. Die url führt zu der scene1.unity3d Datei. Aber bei diesem Aufruf friert Unity ein.

Gibt es eine andere Möglichkeit ganze Scenen als eine AssetBundle-Datei zu speichern und über die WWW Klasse runterzuladen?

 

Ich weiß, dass LoadFromCacheOrDownload funktioniert, aber ich möchte die einzelnen AssetBundles auch wieder löschen können. Eine Funktion zum Löschen einzelner Dateien aus dem Cache hat Unity nicht, nur Caching.CleanCache () für alles.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe den Fehler gefunden, ich habe das "yield return null" in der while-Schleife vergessen

var www = new WWW(url);
while (!www.isDone)
{
print(www.progress);
yield return null;
}

 

Wobei es mich trotzdem wundert, warum man es weglassen kann bei anderen Dateitypen, nur nicht bei von Unity generierten Dateien

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ah, ich sehe das Problem.

Die WWW-Klasse ist eine YieldInstruction. Sie ist soweit ich weiß der einzige Fall, in dem die TopLevel-UnityEngine, also der ganze Mono-Haufen, Threading laufen lässt. Ein Download von Daten mit der WWW-Klasse dauert selbstverständlich in den allermeisten Fällen einige Zeit und sollte daher nicht den Game Loop blockieren. Die WWW-Klasse ist daher als YieldInstruction implementiert.

www.progress und www.isDone werden nach jedem Frame aktualisiert.

Ohne yield return null; blockiert deine Schleife also deinen Game Loop unbegrenzt.

 

Bei mir friert Unity übrigens nicht ein, sondern printet einfach 500 Mal "0" in die Konsole und macht dann weiter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei mir friert Unity übrigens nicht ein, sondern printet einfach 500 Mal "0" in die Konsole und macht dann weiter.

 

Sicher, dass es nicht einfriert? Wenn man yield return null in der Schleife weglässt und versucht eine unity3d-Datei von einem Server zu laden, dann friert es bei mir immer ein. Das ganze passiert nicht bei anderen Dateiformaten wie zip oder txt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...