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

1万+

被折叠的 条评论
为什么被折叠?



