///
/// 配置的基类
///
public class ConfigTable
if UNITY_EDITOR
tableStream = new FileStream(configPath, FileMode.Open);
else
var tableData = Resources.Load<TextAsset>(configPath);
tableStream = new MemoryStream(tableData.bytes);
endif
// 读表
using (var reader = new StreamReader(tableStream, Encoding.GetEncoding("UTF-8")))
{
// 前两行非数据,跳过去
var lineStr = reader.ReadLine();
// 读字段名
lineStr = reader.ReadLine();
var columList = lineStr.Split(',');
List<FieldInfo> filedInfoList = new List<FieldInfo>();
foreach (var columName in columList)
{
var fieldInfo = typeof(TDatabase).GetField(columName);
if (fieldInfo == null)
{
Debug.LogError(string.Format("{0}表,字段:{1} 无法解析", typeof(T).Name, columName));
}
filedInfoList.Add(fieldInfo);
}
// 开始读数据
lineStr = reader.ReadLine();
while (lineStr != null)
{
loadLine(filedInfoList, lineStr);
lineStr = reader.ReadLine();
}
}
}
private void loadLine(List<FieldInfo> filedInfoList, string lineStr)
{
var item = new TDatabase();
var itemList = new List<string>(lineStr.Split(','));
for (int i = 0; i < itemList.Count; ++i)
{
var fieldInfo = filedInfoList[i];
var itemValue = itemList[i];
if (fieldInfo == null)
{ continue; }
// 整型
if (fieldInfo.FieldType == typeof(int))
{
fieldInfo.SetValue(item, int.Parse(itemValue));
}
// 浮点型
else if (fieldInfo.FieldType == typeof(float))
{
fieldInfo.SetValue(item, float.Parse(itemValue));
}
// 字符串
else if (fieldInfo.FieldType == typeof(string))
{
fieldInfo.SetValue(item, itemValue);
}
// 整型数组
else if (fieldInfo.FieldType == typeof(List<int>))
{
var intList = new List<int>();
foreach (var arrayItem in itemValue.Split('$'))
{
intList.Add(int.Parse(arrayItem));
}
fieldInfo.SetValue(item, intList);
}
// 字符串数组
else if (fieldInfo.FieldType == typeof(List<string>))
{
var intList = new List<string>(itemValue.Split('$'));
fieldInfo.SetValue(item, intList);
}
// 同一个dll的type类型
else if (fieldInfo.FieldType == typeof(Type))
{
Type type = Type.GetType(itemValue);
fieldInfo.SetValue(item, type);
}
}
_cache.Add(item.ID, item);
}
}
public class LoadDatabase
{
//表中字段名
public string name;
}
///加载
public class Load:ConfigTable