Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengendalikan Perubahan Serialisasi dalam Sistem Simpan/Muat Unity Menggunakan JSON?

Bagaimanakah Saya Boleh Mengendalikan Perubahan Serialisasi dalam Sistem Simpan/Muat Unity Menggunakan JSON?

DDD
DDDasal
2025-01-04 22:50:41775semak imbas

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

Mengendalikan Perubahan Pensirian dengan Sistem Simpan/Muat Unity

Walaupun kemudahan penyiaran Unity, ia menimbulkan cabaran apabila menambah pembolehubah pada kelas bersiri . Isu ini nyata sebagai ralat penyahserikatan apabila memuatkan versi lama fail bersiri, kerana pembolehubah baharu tidak wujud.

Menggunakan JSON sebagai Format Perantaraan

Untuk menangani masalah ini, kita boleh memanfaatkan JSON (JavaScript Object Notation) sebagai format data perantaraan. Dengan menukar kelas bersiri kepada JSON sebelum menyimpan dan kembali kepada objek semasa dimuatkan, kami boleh mengelakkan ralat penyahsirilan yang disebabkan oleh pembolehubah yang tiada.

Contoh Struktur Kelas

[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;
}

Menyimpan Data dengan 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();
}

Memuatkan Data dengan 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]);
    }
}

Perbezaan antara JsonUtility.FromJson dan JsonUtility.FromJsonOverwrite

  • JsonUtility.FromJson: Mencipta objek baharu daripada JSON dan mengembalikannya, memperuntukkan memori.
  • JromsonUtility.Overwrite. : Menimpa objek yang diluluskan dengan data JSON, tidak mencipta sebarang objek baharu. Ini boleh menjimatkan memori dan mengurangkan penggunaan GC apabila melakukan pemindahan data yang kerap dengan JSON.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Perubahan Serialisasi dalam Sistem Simpan/Muat Unity Menggunakan JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn