Heim >Backend-Entwicklung >C++ >Wie kann ich Serialisierungsänderungen im Speicher-/Ladesystem von Unity mithilfe von JSON verarbeiten?

Wie kann ich Serialisierungsänderungen im Speicher-/Ladesystem von Unity mithilfe von JSON verarbeiten?

DDD
DDDOriginal
2025-01-04 22:50:41690Durchsuche

How Can I Handle Serialization Changes in Unity's Save/Load System Using JSON?

Umgang mit Serialisierungsänderungen mit dem Speicher-/Ladesystem von Unity

Trotz der Bequemlichkeit der Serialisierung von Unity stellt es eine Herausforderung dar, Variablen zu serialisierten Klassen hinzuzufügen . Dieses Problem manifestiert sich als Deserialisierungsfehler beim Laden einer älteren Version einer serialisierten Datei, da die neue Variable nicht vorhanden ist.

JSON als Zwischenformat verwenden

Zu Um dieses Problem zu lösen, können wir JSON (JavaScript Object Notation) als Zwischendatenformat nutzen. Indem wir die serialisierte Klasse vor dem Speichern in JSON und beim Laden wieder in ein Objekt konvertieren, können wir Deserialisierungsfehler vermeiden, die durch fehlende Variablen verursacht werden.

Beispielklassenstruktur

[Serializable]
public class Save
{
    public List<int> ID = new List<int>();
    public List<int> Amounts = new List<int>();
    public int extra = 0;
    public float highScore = 0;
}

Daten mit JSON speichern

void Save()
{
    Save saveData = new Save();
    saveData.extra = 99;
    saveData.highScore = 40;

    // Convert to JSON
    string jsonData = JsonUtility.ToJson(saveData);

    // Save JSON string
    PlayerPrefs.SetString("MySettings", jsonData);
    PlayerPrefs.Save();
}

Daten laden mit JSON

void Load()
{
    // Load saved JSON
    string jsonData = PlayerPrefs.GetString("MySettings");

    // Convert to Class
    Save loadedData = JsonUtility.FromJson<Save>(jsonData);

    // Display saved data
    Debug.Log("Extra: " + loadedData.extra);
    Debug.Log("High Score: " + loadedData.highScore);

    for (int i = 0; i < loadedData.ID.Count; i++)
    {
        Debug.Log("ID: " + loadedData.ID[i]);
    }
    for (int i = 0; i < loadedData.Amounts.Count; i++)
    {
        Debug.Log("Amounts: " + loadedData.Amounts[i]);
    }
}

Unterschied zwischen JsonUtility.FromJson und JsonUtility.FromJsonOverwrite

  • JsonUtility.FromJson: Erstellt ein neues Objekt aus JSON und gibt es zurück und weist es zu Speicher.
  • JsonUtility.FromJsonOverwrite: Überschreibt das übergebene Objekt mit JSON-Daten und erstellt keine neuen Objekte. Dies kann Speicher sparen und die GC-Nutzung reduzieren, wenn häufige Datenübertragungen mit JSON durchgeführt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich Serialisierungsänderungen im Speicher-/Ladesystem von Unity mithilfe von JSON verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn