首页 > 后端开发 > C++ > 如何使用 JSON 处理 Unity 保存/加载系统中的序列化更改?

如何使用 JSON 处理 Unity 保存/加载系统中的序列化更改?

DDD
发布: 2025-01-04 22:50:41
原创
677 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板