HINWEIS: Ich habe dies vor einigen Tagen bei Stack Overflow gefragt, hatte aber nur sehr wenige Aufrufe und keine Antwort. Ich dachte, ich sollte stattdessen auf gamdev.stackexchange fragen.
Dies ist eine allgemeine Frage / Bitte um Beratung zur Aufrechterhaltung eines prozeduralen Generierungssystems durch mehrere Aktualisierungen nach der Veröffentlichung, ohne zuvor generierte Inhalte zu beschädigen.
Ich versuche, Informationen und Techniken zu finden, um Probleme mit dem "Schmetterlingseffekt" beim Erstellen von prozeduralen Inhalten für Spiele zu vermeiden. Bei Verwendung eines gesetzten Zufallszahlengenerators kann eine sich wiederholende Folge von Zufallszahlen verwendet werden, um eine reproduzierbare Welt zu erstellen. Während einige Spiele die generierte Welt nach der Generierung einfach auf der Festplatte speichern, ist eines der leistungsstarken Merkmale der prozeduralen Generierung die Tatsache, dass Sie sich auf die Reproduzierbarkeit der Zahlenfolge verlassen können, um eine Region mehrmals auf dieselbe Weise neu zu erstellen, ohne dass dies erforderlich ist Beharrlichkeit. Aufgrund der Einschränkungen meiner besonderen Situation muss ich die Persistenz minimieren und mich so weit wie möglich auf rein gesäte Konzentration verlassen.
Die Hauptgefahr bei diesem Ansatz besteht darin, dass selbst die geringste Änderung des prozeduralen Generierungssystems einen Schmetterlingseffekt verursachen kann, der die ganze Welt verändert. Dies macht es sehr schwierig, das Spiel zu aktualisieren, ohne die Welten zu zerstören, die die Spieler erkunden.
Die Haupttechnik, mit der ich dieses Problem vermieden habe, besteht darin, die prozedurale Generierung in mehreren Phasen zu entwerfen, von denen jede ihren eigenen Zufallszahlengenerator hat. Dies bedeutet, dass jedes Subsystem in sich geschlossen ist und wenn etwas kaputt geht, wirkt es sich nicht auf alles auf der Welt aus. Dies scheint jedoch immer noch ein großes Potenzial für "Bruch" zu haben, selbst wenn es sich um einen isolierten Teil des Spiels handelt.
Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, vollständige Versionen Ihrer Generatoren im Code zu verwalten und weiterhin den richtigen Generator für eine bestimmte Weltinstanz zu verwenden. Dies scheint mir jedoch ein Alptraum für die Wartung zu sein, und ich bin gespannt, ob dies tatsächlich jemand tut.
Meine Frage ist also wirklich eine Bitte um allgemeine Ratschläge, Techniken und Entwurfsmuster, um dieses Problem des Schmetterlingseffekts zu lösen, insbesondere im Zusammenhang mit Spielaktualisierungen nach der Veröffentlichung. (Hoffentlich ist das keine allzu breite Frage.)
Ich arbeite derzeit in Unity3D / C #, obwohl dies eine sprachunabhängige Frage ist.
AKTUALISIEREN:
Vielen Dank für die Antworten.
Es sieht immer mehr so aus, als ob statische Daten der beste und sicherste Ansatz sind. Wenn das Speichern vieler statischer Daten keine Option ist, würde eine lange Kampagne in einer generierten Welt eine strikte Versionierung der verwendeten Generatoren erfordern. Der Grund für die Einschränkung in meinem Fall ist die Notwendigkeit eines mobilen Cloud-Speicherns / Synchronisierens. Meine Lösung könnte darin bestehen, Wege zu finden, um kleine Mengen kompakter Daten über wesentliche Dinge zu speichern.
Ich finde Stormwinds Konzept von "Käfigen" eine besonders nützliche Art, über Dinge nachzudenken. Ein Käfig ist im Grunde ein Nachsaatpunkt, der die Auswirkungen kleiner Änderungen, dh des Käfigs des Schmetterlings, verhindert.