Alexfedel Geschrieben 14. September 2016 Melden Share Geschrieben 14. September 2016 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 More sharing options...
Sascha Geschrieben 14. September 2016 Melden Share Geschrieben 14. September 2016 Was für ein Protokoll benutzt du denn zum Laden? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Alexfedel Geschrieben 14. September 2016 Autor Melden Share Geschrieben 14. September 2016 https - Es liegt ja auch nur an dem Format ".unity3d", .mp4 oder .txt Dateien lassen sich bsp. normal laden ohne dass Unity einfriert. Und die Funktion LoadFromCacheOrDownload kann die unity3d Dateien auch problemlos laden, nur nicht mit der WWW Klasse. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Alexfedel Geschrieben 15. September 2016 Autor Melden Share Geschrieben 15. September 2016 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 More sharing options...
Sascha Geschrieben 15. September 2016 Melden Share Geschrieben 15. September 2016 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 More sharing options...
Alexfedel Geschrieben 15. September 2016 Autor Melden Share Geschrieben 15. September 2016 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 More sharing options...
Sascha Geschrieben 16. September 2016 Melden Share Geschrieben 16. September 2016 Ich habe nur deinen Code kopiert und das yield return null rausgenommen. Ein Zugriff auf die heruntergeladene Datei erfolgt bei meinem Test also nicht und nein, da ist wirklich nichts eingefroren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Alexfedel Geschrieben 16. September 2016 Autor Melden Share Geschrieben 16. September 2016 Okay, aber es kommt darauf an was für eine Datei man herunterladen will. Führt die "url" bei dir zu einem Assetbundle (.unity3d-Format)? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 16. September 2016 Melden Share Geschrieben 16. September 2016 Sicher, dass das Einfrieren nicht durch den Zugriff kommt, der nicht mehr Teil des Codes ist, den ich kopiert habe? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.