/// <summary> /// 加载二进制配置 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path">二进制文件路径</param> /// <returns></returns> public T LoadBinaryConfigData <T>(string binaryPath) where T : ConfigDataBase { if (string.IsNullOrEmpty(binaryPath)) { Debug.Log("二进制文件路径为空"); return(default(T)); } if (m_configDataDic.ContainsKey(binaryPath)) { return((T)m_configDataDic[binaryPath]); } ConfigDataBase data = GameDataConvert.BinaryDeserialize <T>(binaryPath); #if UNITY_EDITOR if (data == null) { Debug.Log("二进制文件加载失败,尝试加载xml"); string xmlPath = binaryPath.Replace("Binary", "Xml").Replace(".bytes", ".xml"); data = GameDataConvert.XmlDeserializeInEditorMode <T>(xmlPath); } #endif if (data != null) { data.Init(); m_configDataDic.Add(binaryPath, data); return(data as T); } return(default(T)); }
/// <summary> /// 分析单个数据表 /// </summary> private static Dictionary <int, ConfigDataBase> BinaryParse(byte[] binary, Type configType) { Dictionary <int, ConfigDataBase> dic = new Dictionary <int, ConfigDataBase>(); //Head Begin// //二进制源下标 int index = 0; //创建行头清单 //总行数 int configArrayLength = BitConverter.ToInt32(binary, index); index += 4; int[] configArray = new int[configArrayLength]; for (int i = 0; i < configArray.Length; i++) { configArray[i] = BitConverter.ToInt32(binary, index); index += 4; } //创建列头清单 //总列数 int columnListCount = BitConverter.ToInt32(binary, index); index += 4; List <KeyValuePair <string, DataTypeCode> > columnList = new List <KeyValuePair <string, DataTypeCode> >(columnListCount); for (int i = 0; i < columnListCount; i++) { int stringlength = BitConverter.ToInt32(binary, index); index += 4; string key = System.Text.Encoding.UTF8.GetString(binary, index, stringlength); index += stringlength; byte value = binary[index++]; columnList.Add(new KeyValuePair <string, DataTypeCode>(key, (DataTypeCode)value)); } int headOffset = index; //Head End// for (int i = 0; i < configArray.Length; i++) { ConfigDataBase configData = Activator.CreateInstance(configType) as ConfigDataBase; int id = configData.Init(binary, configArray[i] + headOffset, columnList); if (dic.ContainsKey(id)) { Debug.LogError("静态表" + configType.ToString() + "存在重复ID " + id.ToString()); continue; } dic.Add(id, configData); } return(dic); }