예제 #1
0
    /// <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));
    }
예제 #2
0
    /// <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);
    }