Unity版本: 5.6.0f
使用語言: C#
寫在前面
unity已經內置了基本的json工具類JsonUtility,不過暫時不支持Dictionary<K, V>格式,所以使用開源工具Newtonsoft.Json 來解析(密碼: 6arw)。
實現功能:
1. 封裝配置表管理器,管理所有配置表數據
2. 封裝解析接口,實現不同數據結構的統一解析
-
1 所有的配置表放到Resources/Config文件夾下 測試json下載
-
2 創建對應結構表 放到Script/Config/Data文件夾下
public class StageData {
public string name;
public int stageNum;
public string next;
public string bg;
public string icon;
public int battleNum;
public int enemyNumMin;
public int enemyNumMax;
public int moneyTreeRatio;
}
-
3 封裝數據配置管理器
using UnityEngine;
using System.Collections.Generic;
using Newtonsoft.Json;
/**********************************************
* Author : MaShuai
*
* Time : 17-8-15
*
* Function : 配置表數據管理器
**********************************************/
public class ConfigMgr {
#region 表名
private const string StageFileName = "stages";
#endregion
#region 數據容器
private Dictionary<string, StageData> stageDataDic = null;
#endregion
#region 屬性
public Dictionary<string, StageData> StageDataDic
{
get
{
return stageDataDic;
}
}
#endregion
#region 構造方法
private static ConfigMgr instance;
public static ConfigMgr Instance
{
get
{
if(instance == null)
{
instance = new ConfigMgr();
}
return instance;
}
}
private ConfigMgr()
{
}
#endregion
#region 加載配置表
public void LoadConfigData()
{
stageDataDic = LoadConfigFile<string, StageData>(StageFileName);
}
/// <summary>
/// 加載json文本轉換成對應數據結構
/// </summary>
/// <typeparam name="K">主鍵</typeparam>
/// <typeparam name="V">對應數據結構</typeparam>
/// <param name="_fileName">json文本</param>
/// <returns></returns>
private Dictionary<K, V> LoadConfigFile<K, V>(string _fileName)
{
TextAsset textAsset = Resources.Load("Config/" + _fileName) as TextAsset;
if (textAsset != null && textAsset.text != null)
{
return JsonConvert.DeserializeObject<Dictionary<K, V>>(textAsset.text);
// return JsonUtility.FromJson<Dictionary<K, V>>(textAsset.text);
}
else
{
return null;
}
}
#endregion
}
-
4 測試
public class Test : MonoBehaviour {
void Start () {
ConfigMgr.Instance.LoadConfigData();
Dictionary<string, StageData> dic = ConfigMgr.Instance.StageDataDic;
List<string> keys = new List<string>(dic.Keys);
for(int i = 0; i < keys.Count; i++)
{
Debug.Log(dic[keys[i]].name + " " + dic[keys[i]].next);
}
}
}
寫在最后
#成功的道路沒有捷徑,代碼這條路更是如此,唯有敲才是王道。