2017-06-10 1 views
0

Ich bin irgendwie verwirrt über:Unity3D Wie funktioniert der AssetBundle-Cache?

Nach dem Herunterladen eines Assetbundle zum ersten Mal, wie Unity weiß ich habe es heruntergeladen und direkt aus dem Cache (Festplatte) zum zweiten Mal geladen?

Verwendet es URL zum Mapping auf lokalen Speicher? Wenn ich in diesem Fall mein Assetbundle auf dem Server mit dem gleichen Namen aktualisiere, wird es beim zweiten Mal immer noch aus dem Cache geladen, da sich die URL nicht ändert?

Beispielcode:

UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0); 
yield return request.Send(); 
//only download at the first time, at the second time, it can be loaded from cache 
AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request); 
GameObject cube = bundle.LoadAsset<GameObject>("Cube"); 

Antwort

1

Caching zu haben;

Statt Aufruf:

UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 0); 

Sie müssen GetAssetBundle rufen mit einer Versionsnummer:

UnityEngine.Networking.UnityWebRequest request = UnityEngine.Networking.UnityWebRequest.GetAssetBundle(uri, 1, 0); 

Siehe Dokumentation hier: https://docs.unity3d.com/ScriptReference/Networking.UnityWebRequest.GetAssetBundle.html

Sie können dies auch umsetzen mit einem Aufruf an new DownloadHandlerAssetBundle(string url, uint version, uint crc);. Siehe Beispielcode hier: https://docs.unity3d.com/ScriptReference/Networking.DownloadHandlerAssetBundle-ctor.html und Dokumentation hier: https://docs.unity3d.com/ScriptReference/Networking.DownloadHandlerAssetBundle-ctor.html

Beachten Sie, dass, wenn Sie Caching verwenden, wird die request.responseCode nicht mehr Wert sein 200 (Erfolg), wird aber 0 sein, wenn die Daten aus dem Cache abgerufen!

Verwandte Themen