读配置文件,大同小异。1:看了宣雨松的博客开始是用sqlite,之后碰到一个移动盒子的问题,写入不到里面,就放弃了。
2:之后用了同事的ExcelTool,自动帮你读取excel文件,还能ab打包,但是之后遇到同事自己写的一个ab打包框架,又要改读取配置方式。
所以最终用读取txt文件。
a:还是用之前的excel文件,转换成txt文件。
b:总共三个类,一个解析类,一个读取类,一个是具体信息类去解析。具体代码提交看看!
using UnityEngine;
using System.Collections;
public interface IFbConfigReader
{
void LoadConfig(TextAsset txtAsset);
int GetInt(string key);
float GetFloat(string key);
string GetString(string key);
Hashtable GetHashtable(string key);
Hashtable GetTable();
bool pushTable(Hashtable t);
void pop();
}using System;
using UnityEngine;
using System.Collections;
public class FbConfigReader : IFbConfigReader
{
private Hashtable _configTables;
private Hashtable _stackTables;
public FbConfigReader()
{
_configTables = new Hashtable();
}
public void LoadConfig(TextAsset txtAsset)
{
if(txtAsset==null)
{
Debug.Log("txtAsset is null!");
}
// TextAsset textAsset = Resources.Load(filePath, typeof(TextAsset)) as TextAsset;
string[] lineArray = txtAsset.text.Split('\r');
if (lineArray == null || lineArray.Length <= 1)
{
return;
}
string[] keys = lineArray[1].Split("\t"[0]);
for (int i = 3; i < lineArray.Length; i++)
{
string[] arrays = lineArray[i].Split("\t"[0]);
Hashtable tmpTable = new Hashtable();
for (int j = 0; j < arrays.Length; j++)
{
string key = keys[j].Replace("\n", String.Empty);
string value = arrays[j].Replace("\n", String.Empty);
tmpTable.Add(key, value);
}
string key0 = keys[0].Replace("\n", String.Empty);
if (!(tmpTable[key0] == null))
{
try
{
int keyId = int.Parse(tmpTable[key0].ToString());
_configTables.Add("" + keyId, tmpTable);
}
catch (FormatException e)
{
}
}
}
_stackTables = _configTables;
}
public new int GetInt(string key)
{
int val = 0;
try
{
if (_stackTables[key] == null) return val;
val = int.Parse(_stackTables[key].ToString());
}
catch (FormatException e)
{
}
return val;
}
public new float GetFloat(string key)
{
float val = 0f;
try
{
if (_stackTables[key] == null) return val;
val = float.Parse(_stackTables[key].ToString());
}
catch (FormatException e)
{
}
return val;
}
public new Hashtable GetTable()
{
return _configTables;
}
public new string GetString(string key)
{
return _stackTables[key].ToString();
}
public new Hashtable GetHashtable(string key)
{
return _stackTables[key] as Hashtable;
}
public new bool pushTable(Hashtable t)
{
_stackTables = t;
return true;
}
public new void pop()
{
_stackTables = _configTables;
}
}using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class FbConfigBallParamMgr :MonoBehaviour{
private static FbConfigBallParamMgr mInstance;
public static FbConfigBallParamMgr getInstance()
{
if(mInstance==null)
{
GameObject gb = new GameObject("FbConfigBallParamMgr");
mInstance = gb.AddComponent
();
DontDestroyOnLoad(gb);
}
return mInstance;
}
private IFbConfigReader _ballParamsReader;
private IFbConfigReader _shootAreaReader;
private IFbConfigReader _shootBulletBallReader;
public List
listData = new List
();
private bool _bReadConfig = false;
public bool bReadConfig
{
get { return _bReadConfig; }
}
public void LoadConfig(string path, Action
fnFinish)
{
IxLoader.ON_LOAD_FINISH fnLoadFinish = delegate (string strURL2, WWW kW, object kArg)
{
if (!string.IsNullOrEmpty(kW.error))
{
Logger.LogError("Load game config failed: " + kW.error);
kW.Dispose();
if (fnFinish != null)
{
fnFinish(false);
}
return;
}
Logger.Log("Load game config done.");
if (kW.assetBundle == null)
{
Logger.LogError("Game config asset bundle is null.");
kW.Dispose();
if (fnFinish != null)
{
fnFinish(false);
}
return;
}
TextAsset kTA = kW.assetBundle.LoadAsset
("BallParam"); if (kTA == null) { Logger.LogError("Load game config TextAsset failed."); kW.assetBundle.Unload(true); kW.Dispose(); if (fnFinish != null) { fnFinish(false); } return; } // _ballParamsReader = ReadData(kTA); //射球区域解析 kTA = kW.assetBundle.LoadAsset
("shootArea"); if (kTA == null) { Logger.LogError("Load game config TextAsset failed."); kW.assetBundle.Unload(true); kW.Dispose(); if (fnFinish != null) { fnFinish(false); } return; } _shootAreaReader = ReadData(kTA); // //子弹模式解析 kTA = kW.assetBundle.LoadAsset
("ShootBulletBall"); if (kTA == null) { Logger.LogError("Load game config TextAsset failed."); kW.assetBundle.Unload(true); kW.Dispose(); if (fnFinish != null) { fnFinish(false); } return; } _shootBulletBallReader = ReadData(kTA); // _bReadConfig = true; kW.assetBundle.Unload(true); kW.Dispose(); if (fnFinish != null) { fnFinish(true); } }; string strURL = IxURL.ConvertToLoadURL(path); IxLoader.ms_kSig.Load(strURL, null, fnLoadFinish); } public ConfigBallParamTXT GetBallParamInfoData(string id) { Hashtable t = _ballParamsReader.GetHashtable(id); if (t != null) { _ballParamsReader.pushTable(t); ConfigBallParamTXT productInfoData = new ConfigBallParamTXT(); productInfoData.Read(_ballParamsReader); _ballParamsReader.pop(); return productInfoData; } return null; } public ConfigShootAreaTXT GetShootAreaInfoData(string id) { Hashtable t = _shootAreaReader.GetHashtable(id); if (t != null) { _shootAreaReader.pushTable(t); ConfigShootAreaTXT productInfoData = new ConfigShootAreaTXT(); productInfoData.Read(_shootAreaReader); _shootAreaReader.pop(); return productInfoData; } return null; } public ConfigShootBulletBallTXT GetShootBulletInfoData(string id) { Hashtable t = _shootBulletBallReader.GetHashtable(id); if (t != null) { _shootBulletBallReader.pushTable(t); ConfigShootBulletBallTXT productInfoData = new ConfigShootBulletBallTXT(); productInfoData.Read(_shootBulletBallReader); _shootBulletBallReader.pop(); return productInfoData; } return null; } private IFbConfigReader ReadData(TextAsset assets) { IFbConfigReader reader = new FbConfigReader(); reader.LoadConfig(assets); //Hashtable fbTable = reader.GetTable(); //if(fbTable ==null) //{ // Debug.Log("fbtable ball==null!"); //} //foreach (Hashtable item in fbTable.Values) //{ // if(item!=null) // { // ConfigBallParamTXT info = new ConfigBallParamTXT (); // info.Read(item); // listData.Add(info); // } //} return reader; } }using UnityEngine; using System.Collections; public class ConfigBallParamTXT { public int id; public float velocity; public float timeGap; public string areaIndex; public string shootCurve; public float polePosZ; public string ballColor; public void Read(Hashtable t) { if (t == null) return; id = int.Parse(t["id"].ToString()); velocity = float.Parse(t["velocity"].ToString()); timeGap = float.Parse(t["timeGap"].ToString()); polePosZ = float.Parse(t["polePosZ"].ToString()); areaIndex = t["areaIndex"].ToString(); shootCurve = t["shootCurve"].ToString(); ballColor = t["ballColor"].ToString(); } public void Read(IFbConfigReader reader) { if (reader == null) return; id = reader.GetInt("id"); velocity = reader.GetFloat("velocity"); timeGap = reader.GetFloat("timeGap"); polePosZ = reader.GetFloat("polePosZ"); areaIndex =reader.GetString("areaIndex");// t["areaIndex"].ToString(); shootCurve = reader.GetString("shootCurve"); ballColor = reader.GetString("ballColor"); } }