存档系统
1.JSON讲解
关于JSON的具体描述可以百度
2.JsonUtility
JsonUtility可以将可序列对象转化为Json格式的文件,那么,使用JsonUtility搭建存档系统的核心思路就是
第一步,将需要保存的数据转化位Json格式
第二步,将转换后Json文件写在某个路径下的一个文件夹中
当然读取的时候反过来就可以了
我们知道Json有一个优点,那就是直观易读,但是在存档系统中,Json的这个有点将成为致命的缺点,那就是其他人也是易读的,这样就会造成一种结果,那就是存档后,将存档文件修改,就可以做到开G
所以,为了避免这种情况,我们将使用AES进行加密,其他的加密方式也可以,具体看自己需求
下面开始存档系统的搭建
3.第一步存档
写一个函数,需要传递两个参数,一个是保存的存档文件的文件名,另一个是需要存档的数据文件,为object类型
第一步便是json转换
第二步是AES加密(该函数待会儿写)
第三步确定保存的路径
var path = Path.Combine(Application.persistentDataPath, saveFileName);
这行代码Path.Combine()用于将传入的两个参数结合
Application.persistentDataPath 是Unity提供的API,自动获取路径,详见Unity手册
saveFileName 是保存的文件名字
接下来便使用try catch语句来进行异常的捕获
public static void SaveByJson(string saveFileName, object data)
{
var json = JsonUtility.ToJson(data);
var encryptedJson = EncryptString(key, json); // AES解密
var path = Path.Combine(Application.persistentDataPath, saveFileName);
try
{
File.WriteAllText(path, encryptedJson);
#if UNITY_EDITOR
Debug.Log($"成功保存到 {path}.");
#endif
}
catch(System.Exception exception)
{
#if UNITY_EDITOR
Debug.Log($"文件保存到 {path}. \n{exception}");
#endif
}
}
4.读取存档
具体不多讲,看代码
public static T LoadFromJson<T>(string saveFileName)
{
var path = Path.Combine(Application.persistentDataPath, saveFileName);
try
{
//var json = File.ReadAllText(path);
var encryptedJson = File.ReadAllText(path);
var json = DecryptString(key, encryptedJson);// 使用解密函数解密数据
var data = JsonUtility.FromJson<T>(json);
Debug.Log($"成功读取到 {path}.");
return data;
}
catch(System.Exception exception)
{
#if UNITY_EDITOR
Debug.Log($"文件从 {path} 加载. \n{exception}");
#endif
return default;
}
}
5.删除存档
public static void DeleteSaveFile(string saveFileName)
{
var