項目框架工具 - 數據驅動Newtonsoft.Json解析配置表

Unity版本: 5.6.0f

使用語言: C#

寫在前面

unity已經內置了基本的json工具類JsonUtility,不過暫時不支持Dictionary<K, V>格式,所以使用開源工具Newtonsoft.Json 來解析(密碼: 6arw)。

實現功能:

   1. 封裝配置表管理器,管理所有配置表數據
   2. 封裝解析接口,實現不同數據結構的統一解析

  • 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);
        }
    }
}

寫在最后

 #成功的道路沒有捷徑,代碼這條路更是如此,唯有敲才是王道。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容