Maison > développement back-end > C++ > Comment puis-je gérer les modifications de sérialisation dans le système de sauvegarde/chargement d'Unity à l'aide de JSON ?

Comment puis-je gérer les modifications de sérialisation dans le système de sauvegarde/chargement d'Unity à l'aide de JSON ?

DDD
Libérer: 2025-01-04 22:50:41
original
709 Les gens l'ont consulté

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

Gestion des modifications de sérialisation avec le système de sauvegarde/chargement de Unity

Malgré la commodité de la sérialisation de Unity, elle pose un défi lors de l'ajout de variables aux classes sérialisées . Ce problème se manifeste par des erreurs de désérialisation lors du chargement d'une ancienne version d'un fichier sérialisé, car la nouvelle variable n'existe pas.

Utilisation de JSON comme format intermédiaire

Pour Pour résoudre ce problème, nous pouvons exploiter JSON (JavaScript Object Notation) comme format de données intermédiaire. En convertissant la classe sérialisée en JSON avant de l'enregistrer et de la revenir en objet lors du chargement, nous pouvons éviter les erreurs de désérialisation causées par des variables manquantes.

Exemple de structure de classe

[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;
}
Copier après la connexion

Enregistrement des données avec JSON

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();
}
Copier après la connexion

Chargement des données avec 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]);
    }
}
Copier après la connexion

Différence entre JsonUtility.FromJson et JsonUtility.FromJsonOverwrite

  • JsonUtility.FromJson : Crée un nouveau objet de JSON et le renvoie, en allouant mémoire.
  • JsonUtility.FromJsonOverwrite : Écrase l'objet transmis par les données JSON, sans créer de nouveaux objets. Cela peut économiser de la mémoire et réduire l'utilisation du GC lors de transferts de données fréquents avec JSON.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal