使用Unity的JsonUtility来进行存储和读取存档
存档系统脚本
1.创建一个文件保存的路径
private const string SavePath = "/saveData.json";
private void Start()
{
path = Path.Combine(Application.persistentDataPath, SavePath);//Application.persistentDataPath自适应平台生成路径
}
这里使用了const关键字是因为const关键字限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。
2.存档方法
public void SaveData()
{
string json = JsonUtility.ToJson(gameData);//转换成json
File.WriteAllText(path, json);//写入设定好的文件路径文件中
}
3.读档方法
public void LoadData()
{
if (File.Exists(path))//当没有存档时
{
string json = File.ReadAllText(path);//读取特定文件路径的文件
gameData = JsonUtility.FromJson<data>(json);//反序列化
}
else
{
gameData = new data(1);//必须得有一个存档才能读档
SaveData();//上面写的存档方法
}
}
测试
一个简单的计数器,点击加号数字加一,点击减号数字减一,一个存档按钮一个读档按钮
创建数据类脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class data
{
public int i;
public data(int i)//创建一个可以接收初始参数的构造函数,这样在创建data对象时可以直接设置
{
this.i = i;
}
}
JsonUtility只能将带可序列化的public,[SerializeField]private转化为json格式
创建存档系统脚本(包含加号的方法和减号的方法)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;//要使用File.WriteAllText的命名空间
using static data;
using Unity.VisualScripting;
using System;
using UnityEngine.UI;
public class SaveSystem : MonoBehaviour
{
private data gameData;
private int number;
public Text num;
private const string SavePath = "/saveData.json";
private string path;
private void Start()
{
path = Path.Combine(Application.persistentDataPath, SavePath);//Application.persistentDataPath自适应平台生成路径
}
private void Update()
{
num.text = number.ToString();
gameData = new data(number);//获取存档中的数据
}
public void SaveData()
{
string json = JsonUtility.ToJson(gameData);
File.WriteAllText(path, json);
if (json != null)
{
Debug.Log(json);
}
}
public void LoadData()
{
if (File.Exists(path))//当没有存档时
{
string json = File.ReadAllText(path);//读取特定文件路径的文件
gameData = JsonUtility.FromJson<data>(json);//反序列化
number = gameData.i;
Debug.Log(number);
}
else
{
gameData = new data(1);//必须得有一个存档才能读档
SaveData();
}
}
public void Add()
{
number++;
//print(Data.i);
}
public void Subtract()
{
number--;
//print(Data.i);
}
}
可以看到存档系统正常运行