unity2022版本 实现json读取保存 list自定义对象的读取与保存

1.序列化对象

通过unity自带的JsonUtility中的ToJson方法来序列化对象

public static string ToJson(object obj, bool prettyPrint)

ToJson返回一个序列化后的json字符串,

参数一 要序列化的对象

参数二 设置是否返回结果是否带有可读性 默认是false就是不带可读性(可读性理解是否压缩了json字符串中的换行和空格)

2.反序列化对象

通过unity自带的JsonUtility中的FromJson方法来序列化对象

public static T FromJson(string json)

FromJson返回一个反序列化的对象

参数一 要反序列化的json字符串 

T为反序列化对象的数据格式

3.应用

序列化的对象一般用于储存在电脑硬盘中方便在二次进行游戏的时候读取储存的游戏数据 来恢复游戏进度。

4.读取List对象,和保存List对象

问题:unity带的json工具库 在将List对象序列化的时候无法序列化List自定义对象,反序列化的时候也无法反序列化自定义的List对象。

这里有一种解决思路:就是在序列化List对象的时候将List中的对象再序列化一次这样就可以将自定义的List对象转化为string类型的List这样就可以储存与读取了

大概思路可以看下面代码:

序列化List对象:

        public string GetSaveJson()
        {
            SaveGoodListJson saveGoodListJson = new SaveGoodListJson(); 

            
            for(var i = 0; i < list.Count; i++)
            {
                saveGoodListJson.list.Add(JsonUtility.ToJson(list[i]));
            }
          
          
            return JsonUtility.ToJson(saveGoodListJson);
        }

我们将自定义的List对象通过ToJson调用为字符串并保存到一个动态数组中这样就可以储存了

反序列化List对象:

              string save = PlayerPrefs.GetString("saveGoodList");
                if (save != null && save != "")
                {
                    SaveGoodListJson saveGoodListJson = JsonUtility.FromJson(save);
                    if (saveGoodListJson != null && saveGoodListJson.list != null)
                    {
                        List list = saveGoodListJson.list;
                        for (var i = 0; i < list.Count; i++)
                        {
                            GoodsItemJson gd = JsonUtility.FromJson(list[i]);
                            AddGoodItem(gd);
                        }
                        startUiRoot.GetComponent().goodListEx.GetComponent().UpdateItemPos();
                    }

                }

先通过PlayerPrefs获取本地储存的json字符串

然后通过反序列化方法(FromJson)来获取第一层的SaveGoodListJson 对象

然后再循环储存的List数组来读取自定义的序列化对象

5.PlayerPrefs简介

PlayerPrefs是一个存储游戏会话之间玩家偏好的类。它可以将字符串、浮点和整数值存储到用户的平台注册表中。

Unity 将PlayerPrefs 存储在本地注册表中,未加密。请勿使用 PlayerPrefs数据存储敏感数据。Unity根据应用程序运行的操作系统以不同方式

主要方法介绍

DeleteAll 删除所有储存的key
DeleteKey 删除指定名称的key
GetFloat 根据key返回浮点类型的储存值
GetInt 根据key返回整数类型的储存值
GetString 根据key返回字符串类型的储存值
HasKey 判断是否储存了这个key,如果给定的内容key存在于 PlayerPrefs 中,则返回 true,否则返回 false。
Save 保存所有修改的首选项。
SetFloat 设置由给定键标识的首选项的浮点值。您可以使用PlayerPrefs.GetFloat来检索此值。
SetInt 设置由给定键标识的首选项的整数值。您可以使用PlayerPrefs.GetInt来检索此值。
SetString 设置由给定键标识的首选项的字符串。您可以使用PlayerPrefs.GetString来检索此值。

不同平台PlayerPrefs储存的位置可以点击查看

6.PlayerPrefs与JsonUtility的结合使用

大致就是PlayerPrefs负责储存序列化数据到用户本地。根据不同平台储存位置不同。然后通过JsonUtility来序列化对象这样就可以实现一个简单的游戏储存进度与恢复进度。

复杂的游戏储存还可以结合网络,数据库,本地fs文件系统等来完成。这里就先介绍这个简单的储存思路。

大概思路如下:

unity2022版本 实现json读取保存 list自定义对象的读取与保存_第1张图片

最后希望大家能加入游戏开发交流群一起进步:859055710

你可能感兴趣的:(unity开发,游戏流程开发,json,unity,游戏程序,c#,游戏)