数据持久化

unity数据持久化之Josn

1、获取系统存储路径

想要进行数据存储,第一步就是获取到存储的路径。

string Path = Application.persistentDataPath;

该值是目录路径;此目录中可以存储每次运行要保留的数据。在 i OS 和 Android 上发布时,persistentDataPath 指向设备上的公共目录。应用程序更新不会擦除此位置中的文件。用户仍然可以直接擦除这些文件。

构建 Unity 应用程序时,将基于 Bundle ID 生成一个 GUID。此 GUID 是 persistentDataPath 的一部分。如果在将来的版本中保留相同的 Bundle ID,该应用程序将在每次更新时访问相同位置。

详情文档:

Application-persistentDataPath - Unity 脚本 API

2、Json转化工具

这里的json转换工具使用的是Newtonsoft.Json(这个工具比unity自带的强大的多,可以将字典等复杂数据结构也转化为Json);

下载地址: Releases · JamesNK/Newtonsoft.Json (github.com)

点击之后进入到这个界面,下载红框中这个压缩包
在这里插入图片描述

随后打开文件夹进入到bin目录,就可以看到下面这几个版本,打开和你的.net版本一致的文件夹

在这里插入图片描述

将这个Newtonsoft.Json.dll复制到unity的Plugins文件夹下(如果没有就自己建一个)

在这里插入图片描述

此时我们就可以使用NewtonSoft.Json了

3、保存数据

接下来,我们将数据保存到转化为Json格式,并且将它保存到文件中

public void Save(int Order = 0, Data data)
{
    //获取系统存储路径
    string Path = Application.persistentDataPath;
    
    // 将传入的对象 data 序列化为 JSON 字符串,并进行格式化以增强可读性
    string RawJson = JsonConvert.SerializeObject(data, Formatting.Indented);

    // 创建一个 FileInfo 对象,表示要写入的文件信息,文件路径为指定路径下的 Order 文件夹内的 PlayerData.save 文件
    FileInfo info = new FileInfo(Path + "/" + Order + "/PlayerData.save");

    // 声明一个 StreamWriter 对象用于写入文件
    StreamWriter writer;

    // 检查是否存在指定的 Order 文件夹,如果不存在则创建
    if (!Directory.Exists(Path + "/" + Order))
        Directory.CreateDirectory(Path + "/" + Order);

    // 如果 PlayerData.save 文件已经存在,则先删除
    if (File.Exists(Path + "/" + Order + "/PlayerData.save"))
    {
        info.Delete();
    }

    // 创建文件并获取用于写入文件的 StreamWriter 对象
    writer = info.CreateText();

    // 将序列化后的 JSON 字符串写入文件
    writer.WriteLine(RawJson);

    // 关闭 StreamWriter 对象
    writer.Dispose();
    writer.Close();
}

4、加载数据

将数据中文件中读取出来,并转化为对象

public void Load(int Order = 0)
{
    //获取系统存储路径
    string Path = Application.persistentDataPath;
    
    // 检查是否存在指定的 Order 文件夹,如果不存在,则调用 Save 方法创建该文件夹并保存数据,然后返回
    if (!Directory.Exists(Path + "/" + Order))
    {
        Save(Order);
        return;
    }

    // 创建一个 StreamReader 对象用于读取文件内容
    StreamReader reader = new StreamReader(Path + "/" + Order + "/PlayerData.save");

    // 读取文件中的 JSON 字符串
    string json = reader.ReadToEnd();

    // 将 JSON 字符串反序列化为 Data 类型的对象
    Data data = JsonConvert.DeserializeObject<Data>(json);

    // 输出反序列化后的对象内容到控制台
    Debug.Log(data);

    // 关闭 StreamReader 对象
    writer.Dispose();
    reader.Close();
}

Data 类(替换成你自己类)

public class Data
{
    public string name;
    public string email;
}
  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值