首頁 >後端開發 >C++ >如何使用 JSON 處理 Unity 儲存/載入系統中的序列化變更?

如何使用 JSON 處理 Unity 儲存/載入系統中的序列化變更?

DDD
DDD原創
2025-01-04 22:50:41695瀏覽

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

使用Unity 的保存/加載系統處理序列化更改

儘管Unity 序列化很方便,但正在向序列化類別添加變數時卻帶來了挑戰。此問題表現為載入舊版本的序列化檔案時出現反序列化錯誤,因為新變數不存在。

利用 JSON 作為中間格式

至為了解決這個問題,我們可以利用 JSON(JavaScript Object Notation)作為中間資料格式。透過在儲存之前將序列化的類別轉換為 JSON,並在載入時轉換回對象,我們可以避免由於缺少變數而導致的反序列化錯誤。

示例類結構

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

保存數據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();
}

使用 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]);
    }
}

JsonUtility.FromJson 和 JsonUtility.FromJson之間的區別JsonUtility.FromJsonOverwrite

  • JsonUtility.FromJson: 從 JSON 建立一個新物件並返回它,分配記憶體。
  • JsonUtility.FromJsonOverwrite : 用 JSON 覆寫傳入的物件數據,而不會建立任何新物件。當使用 JSON 進行頻繁的資料傳輸時,這可以節省記憶體並減少 GC 使用量。

以上是如何使用 JSON 處理 Unity 儲存/載入系統中的序列化變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn