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);
}
}
}
写在最后
#成功的道路没有捷径,代码这条路更是如此,唯有敲才是王道。
网友评论