Diablo 3 und StarCraft 2 haben eine nette Funktion: Ich kann mit dem Spielen beginnen, bevor das vollständige Spiel oder Update heruntergeladen wurde.
Ich denke, Diablo 3 lädt obligatorische Dateien wie UI-Assets und einige Netze und Texturen herunter, die zuerst über mehrere Ebenen hinweg verwendet werden. Wenn ich ein Spiel starte, kann ich jedoch ein beliebiges Level auswählen, vorausgesetzt, ich habe entsprechende Spielstände. Ich habe beim Spielen noch nie eine Verzögerung davon erlebt - der Start ist immer sehr reibungslos.
Wie funktioniert das? Wie könnte ich eine ähnliche Funktion implementieren?
user-experience
deployment
patching
Nikitaschwarz
quelle
quelle
Antworten:
Assets wie Sound, Video, Modelle und Texturen machen den größten Teil des Downloads aus. Für jedes dieser Assets gibt es mehrere Versionen. Diese mehreren Versionen sollen verschiedene Grafikoptionen unterstützen.
Senden Sie zuerst die für eine niedrige Grafikoption erforderlichen Assets (die zufällig auch die kleinsten sind). Sie haben alles, was Sie brauchen, um das Spiel zu spielen, obwohl Sie nur ungefähr 15% des Gesamtvermögens haben, das für die Unterstützung aller Grafikoptionen benötigt wird.
Sie können dies testen, indem Sie StarCraft 2 erneut installieren. Spielen Sie es ab, sobald Sie zum Bildschirm mit den grafischen Optionen gelangen. Viele Optionen und Einstellungen sind nicht verfügbar.
quelle
Ich habe dies einmal für MMOs implementiert. An einem Wochenende, als ich versuchte, WOW für meine Tochter zu installieren, vergingen 48 Stunden (Patches, Download-Fehler usw.), und ich beschloss, meine eigene bessere Lösung zu entwickeln.
Das Spiel benötigt normalerweise etwa 10 GB Daten, bevor es ausgeführt werden kann. Nicht alle Dateien werden sofort benötigt, aber Spiele haben gewartet, bis alle Dateien lokal vorhanden waren. Meine Lösung bestand darin, das Spiel wie gewohnt lokal laufen zu lassen, aber die EXE-Datei wurde (unter Verwendung eines Windows-Dateiminifilters) dazu verleitet, zu glauben, dass alle Dateien bereits vorhanden waren. Wenn eine angeforderte Datei nicht lokal war, wurde sie vom Dateisystem heruntergeladen und gespeichert. Das Spiel wurde bei Bedarf langsam lokal kopiert. Wenn Bandbreite verfügbar war, wurden die anderen noch nicht benötigten Dateien im Hintergrund übertragen. Dies funktionierte mit ALLEN Spielen, ohne dass neu kompiliert werden musste, da mein Minifilter-Treiber bei Bedarf Dateien erhielt.
Der schlimmste Nachteil war die Latenz. Meine Lösung bestand darin, ein kleines Markov-Kettenmodell zu erstellen, um vorherzusagen, welche Datei als Nächstes benötigt wird, und den Hintergrundlader zu priorisieren. Dies funktionierte wie ein Zauber und unser MMO konnte fast SOFORT ausgeführt werden, nachdem nur die EXE-Datei und einige Ladebildschirmdateien lokal waren (~ 20 MB). Wir konnten auf einen Link auf einer Webseite klicken und unser Spiel mit mehr als 10 GB in ca. 30 Sekunden ausführen . Wir hatten eine Trefferquote von 99%, das heißt, als das Spiel zum ersten Mal eine neue Datei benötigte, war sie bereits da!
Ich würde gerne jemand anderem helfen, dies umzusetzen.
quelle
Auch in einigen Spielen werden Bereiche und Dateien der Endspielwelt verzögert, nur die obligatorischen Bereiche werden beibehalten und können auch installiert werden, während das Spiel noch gespielt wird.
quelle
Um zusammenzufassen, was mehrere Leute gesagt haben, und vielleicht einige Informationen hinzuzufügen:
Dies bedeutet eine höhere Netzwerklast während des Spielens, bis der gesamte Inhalt lokal zwischengespeichert ist, aber eine geringere anfängliche Burst-Last auf Ihren Servern sowie eine kürzere und weniger frustrierende Wartezeit für Benutzer, während sie das Spiel zum ersten Mal herunterladen.
Wenn der Benutzer eine langsame Netzwerkverbindung hat, wird er beim Wechseln der Zone möglicherweise weiterhin die Meldung "Bitte warten, Inhalt wird geladen" erhalten (geben Sie diese an), oder Sie möchten die Bandbreite überprüfen, wenn Sie das Spiel zum ersten Mal starten und wenn der Download zu niedrig ist zuverlässig on the fly lassen sie ihn dort und dann mindestens die gesamte erste ebene warten (und dann wieder, wenn sie zonen betreten, die noch nicht vollständig heruntergeladen wurden).
Dies verhindert, dass der Benutzer mitten im eigentlichen Gameplay zurückbleibt, da seine Netzwerkverbindung blockiert wird.
quelle