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