运行时配置数据

运行时读取二进制数据

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;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值