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;
}