Unity使用Newtonsoft.Json本地化存档

1.依赖包

Newtonsoft请在PacakgeManager处下载。
参考:打工人小棋
在这里插入图片描述

2.原理:

把要存储的对象数据等使用JsonConvert.SerializeObject(object T)进行序列化为字符串,并且通过File.WriteAllText写入json文本文件。
读取的时候就通过反序列化读取存储的数据。
T data = JsonConvert.DeserializeObject(jsonContent);

3.代码

Unity官方推荐把存档文件放置到Application.persistentDataPath目录下。在Windows环境下路径为:在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using System.IO;
public class LocalConfig
{
   
   
    public static void SavaUserData(UserData userData)
    {
   
   
        if(!File.Exists(Application.persistentDataPath + "/users"))
        {
   
   
            System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/users");
        }
        // 序列化
        string jsonContent = JsonConvert.SerializeObject(userData);
        // 输出一个json文件 {0} 是占位符 类似printf的%d
        File.WriteAllText(Application.persistentDataPath + string.Format("/users/{0}.json", userData.name), jsonContent);
    }
    public static UserData LoadUserData(string userName)
    {
   
   
        string path = Application.persistentDataPath + string.Format("/users/{0}.json", userName);
        if(File.Exists(path))
        {
   
   
            // 读取路径文本数据
            string jsonContent = File.ReadAllText(path);
            // 反序列化
            UserData userData = JsonConvert.DeserializeObject<UserData>(jsonContent);
            return userData;
        }
        else
        {
   
   
            Debug.LogError("DO NOT EXIST");
            return null;
        }
    }
}

public class UserData
{
   
   
    public int level;
    public string name;
}

4.可用优化

由于硬盘的读写是比较耗时的操作,我们可以用字典存储<userName,userData>的键值对。
好处:读取相同的数据只有第一次需要使用文件读取,后续只需要使用字典访问。
由于每次退出程序DIctionary都会清空所以第一次访问同一个对象会比后续慢。

using System.Collections
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值