在Unity 中序列化資料時,如果稍後修改序列化類別的結構,可能會遇到問題。新增變數可能會導致反序列化錯誤。
要解決此問題,一種方法是利用 JSON 序列化和 PlayerPrefs 將資料儲存和檢索為 JSON 字串。以下是實作它的方法:
[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}"); }
在此實作中,我們使用 JsonUtility.ToJson 將 Save 物件轉換為 JSON 字串。然後該字串儲存在 PlayerPrefs 中。載入資料時,我們使用 JsonUtility.FromJson 將 JSON 字串反序列化回 Save 物件。
這種方法確保即使稍後向 Save 類別添加新變量,仍然可以加載現有的保存數據,而無需錯誤。反序列化過程將簡單地忽略新的、無法辨識的變數。
注意:
使用此技術時,重要的是要考慮不同版本的類別的潛在問題。例如,如果變更 Save 類別中變數的資料類型,則在載入使用舊版本類別儲存的資料時可能會導致相容性問題。
以上是Unity更新序列化資料時如何處理版本變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!