Beim Serialisieren von Daten in Unity können Probleme auftreten, wenn Sie die Struktur der serialisierten Klasse später ändern. Das Hinzufügen neuer Variablen kann zu Deserialisierungsfehlern führen.
Um dieses Problem zu beheben, besteht ein Ansatz darin, JSON-Serialisierung und PlayerPrefs zu verwenden, um Daten als JSON-Strings zu speichern und abzurufen. So können Sie es implementieren:
[Serializable] public class Save { public List<int> ID; public List<int> Amounts; public int extra; } // Save Data void Save() { Save saveData = new Save(); saveData.ID = new List<int>(); saveData.Amounts = new List<int>(); saveData.extra = 99; // Convert to JSON string jsonData = JsonUtility.ToJson(saveData); // Save JSON string PlayerPrefs.SetString("MySettings", jsonData); PlayerPrefs.Save(); } // Load Data void Load() { // Load saved JSON string jsonData = PlayerPrefs.GetString("MySettings"); // Convert JSON back to class Save loadedData = JsonUtility.FromJson<Save>(jsonData); // Display saved data Debug.Log($"Extra: {loadedData.extra}"); }
In dieser Implementierung konvertieren wir das Save-Objekt mithilfe von JsonUtility.ToJson in einen JSON-String. Diese Zeichenfolge wird dann in PlayerPrefs gespeichert. Beim Laden der Daten deserialisieren wir die JSON-Zeichenfolge mithilfe von JsonUtility.FromJson wieder in ein Save-Objekt.
Dieser Ansatz stellt sicher, dass vorhandene gespeicherte Daten auch dann geladen werden können, wenn Sie später neue Variablen zur Save-Klasse hinzufügen Fehler. Der Deserialisierungsprozess ignoriert einfach die neuen, nicht erkannten Variablen.
Hinweis:
Bei der Verwendung dieser Technik ist es wichtig, potenzielle Probleme mit verschiedenen Versionen der Klasse zu berücksichtigen. Wenn Sie beispielsweise den Datentyp einer Variablen in der Save-Klasse ändern, kann es beim Laden von Daten, die mit einer älteren Version der Klasse gespeichert wurden, zu Kompatibilitätsproblemen kommen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Versionsänderungen beim Aktualisieren serialisierter Daten in Unity um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!