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<T>(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<SaveGoodListJson>(save);
                    if (saveGoodListJson != null && saveGoodListJson.list != null)
                    {
                        List<string> list = saveGoodListJson.list;
                        for (var i = 0; i < list.Count; i++)
                        {
                            GoodsItemJson gd = JsonUtility.FromJson<GoodsItemJson>(list[i]);
                            AddGoodItem(gd);
                        }
                        startUiRoot.GetComponent<StartUi>().goodListEx.GetComponent<Goodlists>().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.PlayerPrefsJsonUtility的结合使用

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

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

大概思路如下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity游戏中,可以使用JSON格式进行数据存储。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通过简单的键值对来表示数据。可以使用LitJson.dll插件来实现Unity读取和存储JSON数据。 以下是使用JSON进行数据存储的步骤: 1. 创建一个技能类(Skill),在该类中封装需要存储的字段,比如Id和Name。 2. 创建Skill类型的List集合,并向其中添加Skill对象。 3. 使用LitJson中的JsonMapper.ToJson()方法将List集合转换为JSON格式的字符串。 4. 使用File.WriteAllText()方法将JSON字符串写入文件。 5. 为了防止中文乱码,可以使用Regex.Replace()方法将转义字符转码为实际字符。 在Unity中使用LitJson.dll插件来读取和存储JSON数据需要将LitJson.dll文件放入Unity的Plugins文件夹中。编写相应的代码来实现读取和存储的功能。可以参考相关的教程或视频来学习更详细的使用方法。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unity Json读取存储](https://download.csdn.net/download/qq_42126516/12251667)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [UnityJSON(数据存储)](https://blog.csdn.net/m0_74427422/article/details/129540637)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [学习记录:unityjson存储](https://blog.csdn.net/shijinlinaaa/article/details/125896790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值