使用 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中文网其他相关文章!