using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class Person
{
public int id { get; set; }
public int level { get; set; }
public int jiezhi_id { get; set; }
public int jiezhi_level { get; set; }
public int xianglian_id { get; set; }
public int xianglian_level { get; set; }
public int yifu_id { get; set; }
public int yifu_level { get; set; }
public int jineng_1_id { get; set; }
public int jineng_1_level { get; set; }
public int jineng_2_id { get; set; }
public int jineng_2_level { get; set; }
public int jineng_3_id { get; set; }
public int jineng_3_level { get; set; }
}
public class PersonList
{
public Dictionary<string, int> dictionary = new Dictionary<string, int>();
}
/// <summary>
/// 持久化存储角色装备信息
/// </summary>
public class CharacterData : MonoBehaviour
{
public static CharacterData instance;
public PersonList personList = new PersonList();
public string JsonPerson_1 = "JsonPerson_1.json";
public string JsonPerson_2 = "JsonPerson_2.json";
public string JsonPerson_3 = "JsonPerson_3.json";
public string JsonPerson_4 = "JsonPerson_4.json";
public string JsonPerson_5 = "JsonPerson_5.json";
public string JsonPerson_6 = "JsonPerson_6.json";
//临时字典 存储读取的信息
public Dictionary<string, int> tempDictionary = new Dictionary<string, int>();
private void Awake()
{
instance = this;
}
void Start()
{
}
/// <summary>
/// 判断是否能找到路径
/// </summary>
/// <param name="name">要找的文件名字</param>
/// <returns></returns>
public bool GetJsonPath(string name) {
string filePath = Application.persistentDataPath+ "//" + name;
if (!File.Exists(filePath)) //不存在就创建键值对
{
return false;
}
else
{
return true;
}
}
/// <summary>
/// 保存JSON数据到本地的方法
/// </summary>
/// <param name="player">要保存的对象</param>
/// <param name="name">保存的文件名字</param>
public void Save(Person player,string name)
{
//打包后persistentDataPath能存储文件
string filePath = Application.persistentDataPath + "//"+ name;
Debug.Log(Application.persistentDataPath+ "//" + name);
if (!File.Exists(filePath)) //不存在就创建键值对
{
personList.dictionary.Add("ID", player.id);
personList.dictionary.Add("LEVEL", player.level);
personList.dictionary.Add("JIEZHI_ID", player.jiezhi_id);
personList.dictionary.Add("JIEZHI_LEVEL", player.jiezhi_level);
personList.dictionary.Add("XIANGLIAN_ID", player.xianglian_id);
personList.dictionary.Add("XIANGLIAN_LEVEL", player.xianglian_level);
personList.dictionary.Add("YIFU_ID", player.yifu_id);
personList.dictionary.Add("YIFU_LEVEL", player.yifu_level);
personList.dictionary.Add("JINENG1_ID", player.jineng_1_id);
personList.dictionary.Add("JINENG1_LEVEL", player.jineng_1_level);
personList.dictionary.Add("JINENG2_ID", player.jineng_2_id);
personList.dictionary.Add("JINENG2_LEVEL", player.jineng_2_level);
personList.dictionary.Add("JINENG3_ID", player.jineng_3_id);
personList.dictionary.Add("JINENG3_LEVEL", player.jineng_3_level);
}
else //若存在就更新值
{
personList.dictionary["ID"] = player.id;
personList.dictionary["LEVEL"] = player.level;
personList.dictionary["JIEZHI_ID"] = player.jiezhi_id;
personList.dictionary["JIEZHI_LEVEL"] = player.jiezhi_level;
personList.dictionary["XIANGLIAN_ID"] = player.xianglian_id;
personList.dictionary["XIANGLIAN_LEVEL"] = player.xianglian_level;
personList.dictionary["YIFU_ID"] = player.yifu_id;
personList.dictionary["YIFU_LEVEL"] = player.yifu_level;
personList.dictionary["JINENG1_ID"] = player.jineng_1_id;
personList.dictionary["JINENG1_LEVEL"] = player.jineng_1_level;
personList.dictionary["JINENG2_ID"] = player.jineng_2_id;
personList.dictionary["JINENG2_LEVEL"] = player.jineng_2_level;
personList.dictionary["JINENG3_ID"] = player.jineng_3_id;
personList.dictionary["JINENG3_LEVEL"] = player.jineng_3_level;
}
//找到当前路径
FileInfo file = new FileInfo(filePath);
//判断有没有文件,有则打开文件,,没有创建后打开文件
StreamWriter sw = file.CreateText();
//ToJson接口将你的列表类传进去,,并自动转换为string类型
string json = JsonMapper.ToJson(personList.dictionary);
//将转换好的字符串存进文件,
sw.WriteLine(json);
//注意释放资源
sw.Close();
sw.Dispose();
AssetDatabase.Refresh();
}
/// <summary>
/// 读取保存数据的方法
/// </summary>
/// <param name="name">要读取文件名字</param>
public void LoadPerson(string name)
{
string filePath = Application.persistentDataPath+ "//" + name;
if (!File.Exists(filePath)) //不存在就创建键值对
{
print("路径不存在");
return;
}
//读取数据,转换成数据流
StreamReader streamreader = new StreamReader(filePath);
//转换成json数据
JsonReader jsonReader = new JsonReader(streamreader);
//转化为jsonData
JsonData jsdata3 = JsonMapper.ToObject(jsonReader);
//print(jsdata3["ID"]);
//清空临时字典 重新添加数据
tempDictionary.Clear();
tempDictionary.Add("ID",int.Parse(jsdata3["ID"].ToString()));
tempDictionary.Add("LEVEL",int.Parse(jsdata3["LEVEL"].ToString()));
tempDictionary.Add("JIEZHI_ID",int.Parse(jsdata3["JIEZHI_ID"].ToString()));
tempDictionary.Add("JIEZHI_LEVEL", int.Parse(jsdata3["JIEZHI_LEVEL"].ToString()));
tempDictionary.Add("XIANGLIAN_ID", int.Parse(jsdata3["XIANGLIAN_ID"].ToString()));
tempDictionary.Add("XIANGLIAN_LEVEL",int.Parse(jsdata3["XIANGLIAN_LEVEL"].ToString()));
tempDictionary.Add("YIFU_ID", int.Parse(jsdata3["YIFU_ID"].ToString()));
tempDictionary.Add("YIFU_LEVEL", int.Parse(jsdata3["YIFU_LEVEL"].ToString()));
tempDictionary.Add("JINENG1_ID",int.Parse(jsdata3["JINENG1_ID"].ToString()));
tempDictionary.Add("JINENG1_LEVEL", int.Parse(jsdata3["JINENG1_LEVEL"].ToString()));
tempDictionary.Add("JINENG2_ID", int.Parse(jsdata3["JINENG2_ID"].ToString()));
tempDictionary.Add("JINENG2_LEVEL", int.Parse(jsdata3["JINENG2_LEVEL"].ToString()));
tempDictionary.Add("JINENG3_ID", int.Parse(jsdata3["JINENG3_ID"].ToString()));
tempDictionary.Add("JINENG3_LEVEL", int.Parse(jsdata3["JINENG3_LEVEL"].ToString()));
//释放资源
streamreader.Close();
streamreader.Dispose();
//在这里循环输出表示读到了数据,,即此数据可以使用了
for (int i = 0; i < jsdata3.Count; i++)
{
Debug.Log(jsdata3[i]);
}
}
void DeleteFile(string path, string name)
{
File.Delete(path + "//" + name);
}
private void Update()
{ //点击读取存储的文件
//if (Input.GetKeyDown(KeyCode.A))
//{
// LoadPerson(JsonPerson_1);
//}
//if (Input.GetKeyDown(KeyCode.B))
//{
// //初始化人物信息
// Person person = new Person();
// person.id = 10;
// person.level = 2;
// person.jiezhi_id = 3;
// person.jiezhi_level = 40;
// person.xianglian_id = 5;
// //调用保存方法
// Save(person, JsonPerson_1);
//}
}
}
Unity 使用JSON实现本地数据保存和读取
最新推荐文章于 2024-08-09 16:05:56 发布