unity教程:存檔系統(tǒng)(JSON篇)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class ArchiveManager : MonoBehaviour
{
//需要保存與加載的數(shù)據(jù)
public Data data = new Data();
//需要保存與讀取的游戲內(nèi)數(shù)據(jù)
public TMP_InputField text1;
public TMP_InputField text2;
public TMP_InputField text3;
public TMP_InputField text4;
//定義游戲保存數(shù)據(jù)路徑
public static string savaGameDataPath;
//定義保存數(shù)據(jù)到本地的文件所在的文件夾名字
//public static string savaGameDataFileName = "game_Data"; (寫注釋過于麻煩就不搞這個了)(忽略即可)
private void Awake()
{
//PS:Application.persistentDataPath獲得的是unity游戲數(shù)據(jù)文件夾的路徑
savaGameDataPath = Application.persistentDataPath;
//debug打印保存數(shù)據(jù)的路徑
Debug.Log(savaGameDataPath);
}
/// <summary>
/// 更新數(shù)據(jù) (將游戲內(nèi)數(shù)據(jù)保存以方便保存到本地)
/// </summary>
private void UpdateData()
{
data.data1 = text1.text;
data.data2 = text2.text;
data.data3 = text3.text;
data.data4 = text4.text;
}
/// <summary>
/// 更新游戲 (將數(shù)據(jù)保存到游戲中以方便游戲進(jìn)行數(shù)據(jù)操作)
/// </summary>
private void UpdateGame()
{
text1.text = data.data1;
text2.text = data.data2;
text3.text = data.data3;
text4.text = data.data4;
}
/// <summary>
/// 保存游戲數(shù)據(jù)至本地
/// </summary>
public void SavaData()
{
//更新數(shù)據(jù) 方便后續(xù)保存數(shù)據(jù)至本地
UpdateData();
//檢測是否存在該文件夾
if (!Directory.Exists(savaGameDataPath + "/game_Data"))
{
//如果沒有該文件夾則在該路徑下創(chuàng)建一個名為game_Data的文件夾
Directory.CreateDirectory(savaGameDataPath + "/game_Data");
}
//使用file靜態(tài)方法Create在game_Data文件夾下創(chuàng)建一個名為data的txt文件 并且將返回對象存入變量以便后續(xù)操作
using (FileStream file = File.Create(savaGameDataPath + "/game_Data/data.txt"))
{
//二進(jìn)制轉(zhuǎn)化 該對象主要用于二進(jìn)制轉(zhuǎn)化操作(用于加密)
BinaryFormatter formatter = new BinaryFormatter();
//使用JsonUtility靜態(tài)方法ToJson將類(Data)數(shù)據(jù)轉(zhuǎn)換為Json格式并返回為一個字符串
string json = JsonUtility.ToJson(data);
//使用formatter實例方法Serialize(序列化)將json字符串導(dǎo)入file文件中
formatter.Serialize(file, json);
}
}
public void LoadData()
{
//檢測是否存在該文件
if (File.Exists(savaGameDataPath + "/game_Data/data.txt"))
{
//使用File靜態(tài)方法Open讀取保存在本地的數(shù)據(jù)文件
using (FileStream file = File.Open(savaGameDataPath+"/game_Data/data.txt",FileMode.Open))
{
//二進(jìn)制轉(zhuǎn)化 該對象主要用于二進(jìn)制轉(zhuǎn)化操作(用于解密)
BinaryFormatter formatter = new BinaryFormatter();
//使用formatter實例方法Deserialize(反序列化)將文件的二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成Json文本并把Json文本返回成一個字符串
string json = (string)formatter.Deserialize(file);
//使用JsonUtility靜態(tài)方法FromJsonOverwrite將Json文本的數(shù)據(jù)寫入data中
JsonUtility.FromJsonOverwrite(json, data);
}
//更新游戲 把本地數(shù)據(jù)更新到游戲中
UpdateGame();
}
}
}
/// <summary>
/// 需要保存至本地的數(shù)據(jù)
/// </summary>
public class Data
{
public string data1;
public string data2;
public string data3;
public string data4;
}