注:!!!untiy 打包安卓平台不允许使用Unity自带的json工具Newtonsoft.Json
LitJson不支持float类型的字符。
LitJson支持的格式如下:
public JsonData(bool boolean);
public JsonData(double number);
public JsonData(int number);
public JsonData(long number);
public JsonData(object obj)
public JsonData(string str);
需要让LitJson支持Float类型的方式:
在Awake里面或者在初始化协程里面调用方法即可
///
/// LitJson数据转换,可使用Float
///
private static void RegisterFloat()
{
void Exporter(float obj, JsonWriter writer)
{
writer.Write(obj);
}JsonMapper.RegisterExporter((ExporterFunc
)Exporter); float Importer(double obj)
{
return (float)obj;
}JsonMapper.RegisterImporter((ImporterFunc
)Importer);
}
安卓端,IOS,PC的JSON转换(通用)
- using LitJson;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using Unity.VisualScripting;
- using UnityEngine;
- using UnityEngine.Networking;
-
- public class JsonManager : SingleMono<JsonManager>
- {
- public AllShengLingManagers allShengLing; //生灵列表
- public string path; //Json存放路径
- void Start()
- {
- //初始化Json
- StartCoroutine(LoadSave("人族"));
- }
-
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.V))
- {
- for (int i = 0; i < allShengLing.ShengLingList.Count; i++)
- {
- Debug.Log(allShengLing.ShengLingList[i].name);
- }
- }
-
- }
- ///
- /// 初始化人物操作
- ///
- /// 种族名称
- ///
- public IEnumerator LoadSave(string name)
- {
- RegisterFloat(); //可使用Float类型数据
- path = Application.persistentDataPath +"/"+ "AllShengLing.json";
- //allShengLing = new AllShengLingManagers();//初始化生灵
- //allShengLing.ShengLingList = new List
(); //初始化 - UnityWebRequest www = UnityWebRequest.Get("file://" + path); //获取路径
- yield return www.SendWebRequest(); //发生请求
- if (www.result == UnityWebRequest.Result.Success)
- {
- var fileJson = www.downloadHandler.text; //读取JSON文件
- Debug.Log(fileJson);
- Debug.Log($"数据存在---");
- StreamReader r = new StreamReader(path); // 读
- string srRTE = r.ReadToEnd();
- Debug.Log("
" + "Json配置文件内容:" + "" + srRTE); - allShengLing = JsonMapper.ToObject
(srRTE); //反序列化生灵列表 -
- r.Close(); //关闭文本
- if (allShengLing == null)
- {
- Debug.Log("Json为空");
- }
- else //有数据的话,把各个种族的数据初始化
- {
- for (int i = 0; i < allShengLing.ShengLingList.Count; i++)
- {
- if (CSVTest.instance.names.Contains(allShengLing.ShengLingList[i].name)) //判断名字是否相等,然后给到值,初始化
- {
- //某个UI等于该数据的数值
- }
- }
- //for (int i = 0; i < CSVTest.instance.names.Count; i++) //查找names里面有没有这个名字
- //{
- // if (CSVTest.instance.names[i].Equals(name)) //循环遍历列表里面的名字是不是叫name,是的情况下就加成并退出循环
- // {
- // allShengLing.ShengLingList[i].AllZhanLi += 10000; //总战力+10000
- // allShengLing.ShengLingList[i].AllSum += 10000; //总人数+10000
- // break;
- // }
- //}
- }
- }
- else
- {
- Debug.Log("没有该生灵的Json文件,正在生成该数据");
- //初始化生灵数据
- Init(name);
- }
- }
- ///
- /// 初始化生灵
- ///
- public void Init(string name)
- {
- ShengLing sl = new ShengLing();
- sl.name = name;
- sl.LeveL = 1;
- sl.QiangZhe = 0;
- sl.QiWu = 0;
- sl.MiFa = 0;
- sl.XieMai = 0;
- sl.AllSum = 10000;
- sl.AllZhanLi = 10000;
- allShengLing.ShengLingList.Add(sl);
- CSVTest.instance.names.Add("人族");
- GameManagers.instance.SaveRoleData(allShengLing, "AllShengLing.json");
- }
- ///
- /// LitJson数据转换,可使用Float
- ///
- public void RegisterFloat()
- {
- void Exporter(float obj, JsonWriter writer)
- {
- writer.Write(obj);
- }
-
- JsonMapper.RegisterExporter((ExporterFunc<float>)Exporter);
-
- float Importer(double obj)
- {
- return (float)obj;
- }
-
- JsonMapper.RegisterImporter((ImporterFunc<double, float>)Importer);
- }
- ///
- /// 删除对象
- ///
- /// 要删除的名字
- public void RemoveShuJu(string name)
- {
- for (int i = 0; i < allShengLing.ShengLingList.Count; i++)
- {
- var item = allShengLing.ShengLingList[i]; //要删除的对象
- if (item.name.Equals(name))
- {
- allShengLing.ShengLingList.Remove(item);
- GameManagers.instance.SaveRoleData(allShengLing, "AllShengLing.json");
- }
- }
-
- }
-
- }
保存JSON脚本展示,放入单例脚本中,方便调用
-
- ///
- /// Json保存
- ///
- ///
数据类型 - /// 对象
- public void SaveRoleData<T>(T data,string name)
- {
- Debug.Log("数据保存");
- string path = Application.persistentDataPath + "/"+ name;
- string saveJsonStr = JsonMapper.ToJson(data); //序列化JSON文件,写入Json
- File.WriteAllText(path, saveJsonStr);
-
- }