需要注意的事项如下:
一、Json的库文件LitJson.dll需要放在项目的Assets根文件夹中,一般是在Assets文件夹里面新建一个名为Plugins文件夹中,把Json的库文件放在这个文件夹中就可以。
二、接下来我们首先要把Json文件中的文本内容提取出来,也就是后缀以.json为结尾的Json文件,提取的方式暂时可以有以下两种通过代码的方式提取Json文件的文本内容:
//第一种方式
TextAsset filePath = Resources.Load<TextAsset>(Json文件名);
Debug.Log(filePath);
//第二种方式
string filePathStr = Resources.Load<TextAsset>(Json文件名).text;
Debug.Log(filePathStr);
注:
1、代码中的“(Json文件名)“括号里面的"文件名"一定一定不要加上后缀名为.json或者是.txt,就是单纯的文件名,不要加Json文件名后缀就可以了!
2、如果Json文件是有层级结构的,那么我们在写Json文件名的时候顺便也要把Json前面的路径地址加上。
如果以上不清楚的话我就在这里打个比方,
第一种情况: 假如我们在Assets根文件夹里面有一个名为Resources文件夹,这个Resources文件夹中只有一个名为Demo.json的Json文件,那么我们现在的Json文件名为Demo就可以了。
第二种情况: 假如我们在Assets根文件夹里面有一个名为Resources文件夹,这个Resources文件夹中还有一个名为Catalog的文件夹,这个Catalog的文件夹中有一个名为Demo.json的Json文件,那么我们现在的Json文件名就要加上前面的文件夹路径了,也就是现在的Json文件名为Catalog/Demo就可以了。
三:通过以上的步骤就可以得到Json文件中的文本内容,那我们现在就可以开始下一个步骤:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System.IO;
public class Memento
{
private string savePathInitPath; //初始版的Json文件路径
private string savePathCompletePath; //正在游戏版的文件路径
private string initContent; //初始版Json文件夹中的内容
private string completeContent; //正在游戏版的文件内容
private string filePath;
//初始化游戏的相关数据
public void DataInit()
{
//通过Application.persistentDataPath可以持久在手机端读取、写入以及保存游戏的相关数据
savePathInitPath = Application.persistentDataPath + "/playerManager.json";
savePathCompletePath = Application.persistentDataPath + "/CompleteplayerManagerDataVersion.json";
//读取Json文件夹中的文本内容
initContent = Resources.Load<TextAsset>("Json/CompleteplayerManagerDataVersion").text;
completeContent = Resources.Load<TextAsset>("Json/playerManager").text;
//防止重复赋空值
if (filePath != null)
{
return;
}
filePath = "";
}
//读取游戏数据
public PlayerManager LoadByJson()
{
//防止判空
if (savePathInitPath == null || savePathCompletePath == null || initContent == null || completeContent == null)
{
DataInit();
}
PlayerManager playerManager = new PlayerManager();
if (GameManager.Instance.initPlayerManager)
{
filePath = savePathInitPath;
//如果手机端的文件夹中不存在该文件,就创建该文件
if (!File.Exists(filePath))
{
File.WriteAllText(filePath,initContent);
}
}
else
{
filePath = savePathCompletePath;
if (!File.Exists(filePath))
{
File.WriteAllText(filePath, completeContent);
}
}
if (File.Exists(filePath))
{
StreamReader sr = new StreamReader(filePath);
string jsonStr = sr.ReadToEnd();
sr.Close();
playerManager = JsonMapper.ToObject<PlayerManager>(jsonStr);
return playerManager;
}
else
{
Debug.Log("PlayerManager读取失败");
}
return null;
}
//存储游戏数据
public void SaveByJson()
{
if (savePathInitPath == null || savePathCompletePath == null || initContent == null || completeContent == null)
{
DataInit();
}
PlayerManager playerManager = GameManager.Instance.playerManager;
string saveJsonStr = JsonMapper.ToJson(playerManager);
StreamWriter sw = new StreamWriter(filePath);
sw.Write(saveJsonStr);
sw.Close();
}
}
代码中最最最值得需要注意的是: Application.persistentDataPath这个的相关使用方法,因为这个可以持久在手机端读取、写入以及保存游戏的相关数据。