StorageManager - Laden & Speichern von Daten in Unity

Die Speicherung von einfachen (oder komplexen) Daten ist in jedem Spiel ein Thema. Du wirst Benutzereinstellungen speichern müssen. Möglicherweise musst Du auch den Spielfortschritt irgendwo hinterlegen und zu einem späteren Zeitpunkt wieder laden. Außerdem möchtest Du möglicherweise Daten während des Spiels kurz zwischen speichern und dann im späteren Verlauf wieder auf sie zugreifen. Awesome Accessories bietet dafür eine Reihe von Tools.

FilesService

Zunächst einmal möchte ich Dir den FilesService vorstellen. Dieser bietet Dir eine einfache Möglichkeit Text-basierte Daten auf dem Gerät des Benutzers zu speichern, zu laden, Dateien zu verschieben und einiges mehr. Standardmäßig wird Application.persistentDataPath als Basis für alle Anfragen verwendet. So ist sichergestellt, dass Du Dich in einem beschreibbaren Ordner befindest.

var filesService = new FilesService();

Du kannst aber auch einen eigenen basPath definieren.

var filesService = new FilesService(myAwesomeBasePath);

Du kannst den Service nutzen, um Textdaten zu laden:

string contents = filesService.LoadText("myAwesomeFile.csv");

Du kannst aber auch stattdessen Rohdaten laden:

byte[] contents = filesService.LoadBytes("myAwesomeFile.jpg");

Selbstverständlich kannst Du Daten speichern:

filesService.Save("my/Awesome/File.json", "the file contents");

Du kannst Dateien löschen:

filesService.Delete("my/Awesome/File.json");

Um zu überprüfen, ob eine spezifische Datei existiert, kannst Du diese Funktion nutzen:

filesService.Exists("my/Awesome/File.json");

Du kannst zudem Dateien kopieren und verschieben:

filesService.Copy("my/Awesome/SourceFile.json", "my/Awesome/TargetFile.json");
filesService.Move("my/Awesome/SourceFile.json", "my/Awesome/TargetFile.json");

Du kannst prüfen, ob es sich bei einem Pfad um einen Ordner handelt:

filesService.IsDirectory("my/Awesome/Directory");

Du kannst Ordner erstellen und auch wieder löschen:

filesService.CreateDirectory("my/Awesome/Directory");
filesService.DeleteDirectory("my/Awesome/Directory");

Zudem kannst Du Dir eine Liste von Ordnern ausgeben lassen:

filesService.GetDirectoriese("my/Awesome/Directory")

Oder aber eine Liste von Dateien:

filesService.GetFilese("my/Awesome/Directory", "*.json");

Du siehst also, dass Du mit dem FilesService ein Tool hast, mit dem das Speichern und Laden von Dateien einfacher werden sollte. Aber genau genommen ist dieser Service nicht der Kern dieses Moduls. Stattdessen stellt Dir dieses Modul verschiedene StorageManager zur Verfügung.

Die verschiedenen Storage-Services

Dieses Modul stellt verschiedene Storage-Services zur Verfügung:

  • JsonStorageService: Dieser Service kann verwendet werden, um Daten in einer JSON-Datei zu speichern.

  • SimpleStorageService: Dieser Service nutzt die PlayerPrefs von Unity, um Daten zu speichern.

  • RuntimeStorageService: Dieser Service speichert Daten kurzzeitig zwischen.

Alle Services basieren dabei auf dem gleichen Interface und stellen die gleichen Methoden zur Verfügung. So kannst Du beliebig zwischen den Services wechseln.

  • Set(string key, int value) Diese Methode kann verwendet werden, um einen Integer-Wert zu speichern.

  • Set(string key, float value) Mit dieser Methode kann ein Float-Wert gespeichert werden.

  • Set(string key, string value) Mit dieser Methode kann ein String-Wert gespeichert werden.

  • Set(string key, bool value) Mit dieser Methode kann ein boolescher Wert gespeichert werden.

  • Set(string key, Vector2 value) Diese Methode kann verwendet werden, um einen Vector2-Wert zu speichern.

  • Set(string key, Vector3 value) Mit dieser Methode kann ein Vector3-Wert gespeichert werden.

  • Set(string key, Vector4 value) Mit dieser Methode kann ein Vector4-Wert gespeichert werden.

  • Set(string key, Color value) Diese Methode kann verwendet werden, um einen Color-Wert zu speichern.

  • Set(string key, Color32 value) Diese Methode kann verwendet werden, um einen Color32-Wert zu speichern.

  • Set(string key, Quaternion value) Diese Methode kann verwendet werden, um einen Quaternion-Wert zu speichern.

  • Get(string key, int defaultValue) Diese Methode kann verwendet werden, um einen Integer-Wert zu erhalten.

  • Get(string key, float defaultValue) Mit dieser Methode kann ein Float-Wert ermittelt werden.

  • Get(string key, string defaultValue) Diese Methode kann verwendet werden, um einen String-Wert zu erhalten.

  • Get(string key, bool defaultValue) Mit dieser Methode kann ein boolescher Wert ermittelt werden.

  • Get(string key, Vector2 defaultValue) Diese Methode kann verwendet werden, um einen Vector2-Wert zu erhalten.

  • Get(string key, Vector3 defaultValue) Diese Methode kann verwendet werden, um einen Vector3-Wert zu erhalten.

  • Get(string key, Vector4 defaultValue) Diese Methode kann verwendet werden, um einen Vector4-Wert zu erhalten.

  • Get(string key, Color defaultValue) Diese Methode kann verwendet werden, um einen Color-Wert zu erhalten.

  • Get(string key, Color32 defaultValue) Diese Methode kann verwendet werden, um einen Color32-Wert zu erhalten.

  • Get(string key, Quaternion defaultValue) Diese Methode kann verwendet werden, um einen Quaternion-Wert zu erhalten.

  • Clear() Diese Methode kann verwendet werden, um alle gespeicherten Werte zu löschen.

Bitte beachte, dass Du auch bei den Get-Methoden immer einen Default-Wert verwenden musst. Dieser muss den gleichen Typ haben, wie der Wert den Du erwartest.

Wann nutze ich welchen Service (oder Manager)?

Selbstverständlich steht jeder dieser Services auch als StorageManager zu Verfügung. Die Manager sind wie immer im Grunde namensgleich zu den jeweiligen Services:

  • JsonStorageManager

  • SimpleStorageManager

  • RuntimeStorageManager

So kannst Du beispielsweise den SimpleStorageManager nutzen, um einen String zu speichern:

SimpleStorageManager.service?.Set("username", "Alfred Awesome");

Und so kannst Du diesen String dann wieder abrufen:

var username = SimpleStorageManager.service?.Get("username", "");
if (username == "") {
    username = "Anonymous";
} 

Als generelle Richtlinie für die Nutzung der Services oder Manager kannst Du Dir folgendes merken:

  • Wenn Du nur kurz etwas zwischen speichern möchtest und es nicht notwendig ist, dass die Daten nach dem Ende des Spiels verfügbar sind, nutze der RuntimeStorageManager.

  • Wenn Du Daten über längere Zeit speichern möchtest, die Datenmenge aber nicht allzu groß ist, dann nutze den SimpleStorageManager. Das gilt zum Beispiel bei Benutzereinstellungen.

  • Wenn Du Daten über längere Zeit speichern möchtest und die Datenmenge größer sein könnte oder Du einfach auf Nummer sicher gehen willst, dann nutze den JsonStorageManager.

Dein Feedback ist wichtig!

Was hältst Du von den hier vorgestellten Services? Fehlt Dir etwas oder funktioniert etwas nicht wie erwartet? Wie immer freue ich mich über Feedback. Lass mich gerne wissen was Du über dieses Modul denkst. Dafür kannst Du zum Beispiel die Kommentarfunktion unter dem Artikel nutzen. Weitere Kontakt-Möglichkeiten findest Du auf hier. Wenn Du einen Bug gefunden hast oder Dir eine Erweiterung wünscht, erstelle bitte einen Issue im GitHub-Repository. Weitere Dokumentation findest Du wie immer in der README des entsprechenden Moduls.

Noch keine Kommentare vorhanden.