运行时读取二进制数据
ConfigManager
LoadData :从二进制文件中读取数据
FindData:寻找加载数据,如果没有那么加载数据
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 运行时读取二进制数据表里的内容
/// </summary>
public class ConfigManager : Singleton<ConfigManager>
{
/// <summary>
/// 储存所有已经加载的配置表
/// </summary>
protected Dictionary<string, ExcelBase> m_AllExcelData = new Dictionary<string, ExcelBase>();
/// <summary>
/// 从二机制数据里加载配置表到内存
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <returns></returns>
public T LoadData<T>(string path)where T : ExcelBase
{
if(string.IsNullOrEmpty(path))
{
return null;
} //判断是否为空
if (m_AllExcelData.ContainsKey(path))
{
Debug.LogError("重复加载相同配置文件" + path);
return m_AllExcelData[path] as T;
}
T data = BinarySerializeOpt.BinaryDeserilizeRun<T>(path); //反序列化二进制文件
#if UNITY_EDITOR //如果在editor下那么就自动获取以下
if(data == null)
{
Debug.Log(path + "不存在,从xml加载数据!");
string xmlPath = path.Replace("Binary", "xml").Replace(".bytes", ".xml");
data = BinarySerializeOpt.XmlDeserialize<T>(xmlPath);
}
#endif
if (data != null)
{
data.Init();
}
m_AllExcelData.Add(path, data);
return data ;
}
/// <summary>
/// 根据路径查找数据,如果没有的话就加载(因为如果表太多一次性全部加载可能会崩掉)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <returns></returns>
public T FindData<T>(string path)where T : ExcelBase
{
if (string.IsNullOrEmpty(path))
return null;
ExcelBase excelBase = null;
if(m_AllExcelData.TryGetValue(path,out excelBase))
{
return excelBase as T;
}
else
{
excelBase = LoadData<T>(path); //没有加载,就加载这个表
}
return null;
}
}