单机游戏常用的存读档方式
1).简介
这是比较常用的游戏存读档方式,通过JsonUtility将数据转化为json数据,然后将输入写入到本地文件中实现存档,当玩家加载游戏时读取本地文件数据实现读档。
注意并非所有的数据都能通过JsonUtility转化为json数据,它必须是 MonoBehaviour、ScriptableObject 或应用了 Serializable 属性的普通类/结构。要包含的字段的类型必须受序列化器支持;不受支持的字段以及私有字段、静态字段和应用了 NonSerialized 属性的字段会被忽略。
特别注意的是,泛型,字典,多维数组,委托是不被支持的序列化类型。
有种简易判断是否支持序列化的方法,就是将类型标记为 公有的[System.Serializable],观察编辑器中是否显示该字段并且没有报错,则该类型可支持序列化。
2).使用案例
//存档
public static void SaveByJson(string saveFileName, object data)
{
//将需要保存的数据转化为json格式
var json = JsonUtility.ToJson(data);
//此处需通过第一个参数获得不同系统保存文件夹的根路径,将其与savefilename连接获得文件保存的路径
var path = Path.Combine(Application.persistentDataPath, saveFileName);
//将json数据写入到路径的文件夹中实现存档的功能
File.WriteAllText(path, json);
}
//tip.将saveFileName用时间格式书写则可获得,不同时间保存的数据如
//读档,需使用到泛型类,因为需要保存的数据可能是不同的类
public static T LoadFromJson<T>(string saveFileName)
{
//获得需要读档的文件路径
var path = Path.Combine(Application.persistentDataPath, saveFileName);
//读取文件json数据
var json = File.ReadAllText(path);
//将json数据转化为T类型数据实现读档
var data = JsonUtility.FromJson<T>(json);
return data;
}
//删除存档
public static void DeleteSaveFile(string saveFileName)
{
//获得需要删除的文件路径
var path = Path.Combine(Application.persistentDataPath, saveFileName);
//删除该文件
File.Delete(saveFileName);
}
3) .总结
优点:
1. 格式简单便于阅读和编写
2. 适配性好,适用于多种编程语言
3. 轻量级,便于网络传输与解析
缺点:
1. 支持的数据类型有限,需要通过额外的转化将其转化为支持的数据类型
2. 数据安全性低,容易被修改
4).适用范围
1.联网数据存储
1.1 数据大小轻量级,可作为优秀的网络数据交换载体
1.2 云存档
2.单机数据存档
2.1 非敏感游戏数据存储
2.2 玩家的偏好设置
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved