Datenzugriff
20.06.2024, 07:15 Uhr
Neue Open-Source-Tools für die Datenserialisierung
Effiziente und flexible Serialisierung leicht gemacht.
(Quelle: dotnetpro)
Die Serialisierung von Daten ist ein komplexes und oft mühsames Unterfangen - das gilt auch für die Spieleentwicklung. Die Herausforderung besteht nicht nur darin, Spieldaten zu speichern, sondern auch darin, diese Daten später korrekt zu laden und zu verwenden. Dies umfasst unter anderem das Handling von veralteten Speicherständen, das Wiederherstellen hierarchischer Zustandsmaschinen und die polymorphe Deserialisierung. Nun gibt es jedoch eine neue Reihe von Open-Source-Tools, die Entwicklern diese Aufgabe erheblich erleichtern sollen.
Die Herausforderung der Serialisierung
Auf den ersten Blick erscheint die Serialisierung einfach: Daten in eine Datei schreiben und später wieder einlesen. Doch die Realität ist komplizierter. Was passiert, wenn das Speicherdatum nicht mehr mit den aktuellen Datenmodellen übereinstimmt? Wie rekonstruieren Sie eine hierarchische Zustandsmaschine oder übersetzen gespeicherte Daten in polymorphe Modelle? Diese und weitere Fragen machen die Serialisierung zu einer komplexen Aufgabe.
Nach sechs Monaten Entwicklung wurden drei bestehende Pakete aktualisiert und vier neue Pakete vorgestellt, die speziell für die Anforderungen der Serialisierung in C#-Spielen entwickelt wurden. Diese Tools basieren auf einem quelloffenen Technologie-Stack und versprechen eine deutliche Erleichterung bei der Entwicklung von Speichersystemen für Spiele.
Ein gutes Speichersystem sollte plattformübergreifend funktionieren, insbesondere auf iOS, wo Ahead-of-Time (AOT) Kompilierung erforderlich ist. Es sollte einfach zu erweitern sein, polymorphe Deserialisierung unterstützen, Sammlungen effizient handhaben und Versionierung ermöglichen, um mit sich entwickelnden Datenmodellen umzugehen. Zudem sollten benutzerdefinierte Serialisierungshooks für spezielle Anforderungen verfügbar sein.
Neue Lösung
Das neue Serialisierungssystem baut auf dem weit verbreiteten System.Text.Json auf und erweitert es um Funktionen, die speziell auf die Bedürfnisse von Spielentwicklern zugeschnitten sind. Dies umfasst die Unterstützung für AOT-Kompatibilität, die einfache Erweiterbarkeit durch Attribute und die Handhabung von Sammlungen und vererbten Typen. Zudem wird eine Versionierung der Modelle ermöglicht, sodass alte Speicherdaten automatisch aktualisiert werden können.
Der Introspection Generator ist das Kernstück der neuen Tools und generiert automatisch Metadaten über alle im globalen Scope sichtbaren Typen, einschliesslich verschachtelter Typen. Dies ermöglicht eine performante und flexible Serialisierung, die speziell auf die Anforderungen von Spielen zugeschnitten ist.
Für Entwickler, die mit der Godot-Engine arbeiten, gibt es zusätzliche Erweiterungen, die die Serialisierung von Godot-spezifischen Typen wie Transform3D und Vector3 unterstützen. Diese Erweiterungen sind als separate Pakete verfügbar und bieten spezielle JSON-Konverter für Godot.
Der SaveFileBuilder ermöglicht es Entwicklern, komplexe Speicherstrukturen zu definieren und die Daten aus verschiedenen Teilen des Szenenbaums zu extrahieren und wiederherzustellen. Dies geschieht durch das Erstellen von SaveChunks, die als Baumstruktur organisiert sind und eine rekursive Konstruktion der Speicherdatei ermöglichen.