ConfigReader(二)—— MapLoadConfig

来源:互联网 发布:拉比 婴儿床 知乎 编辑:程序博客网 时间:2024/05/29 02:43
目录为Assets/Scripts/ConfigReader目录下MapLoadConfig.cs这个文件主要是从config中读取并持有地图信息。先来看看这个config文件长什么样:Assets/Resources/Config/MapLoadCfg.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><MapLoadCfg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <info MapID="1001">        <LoadScene>pvp_001</LoadScene>        <MiniMap>MiniMap_001</MiniMap>        <NameCn>圣光营地</NameCn>        <ACameraPos>1</ACameraPos>        <BCameraPos>6</BCameraPos>        <ShowPic>135</ShowPic>        <PlayerNum>6</PlayerNum>        <PlayerMode>3V3</PlayerMode>        <ShopID>1001</ShopID>        <CameraType>2</CameraType>        <IsAI>1</IsAI>        <IsNormal>1</IsNormal>        <IsRank>1</IsRank>        <IsTrain>0</IsTrain>        <IsDungeon>0</IsDungeon>    </info>    <info MapID="1002">        <LoadScene>pvp_002</LoadScene>        <MiniMap>MiniMap_002</MiniMap>        <NameCn>奥斯深渊</NameCn>        <ACameraPos>15</ACameraPos>        <BCameraPos>20</BCameraPos>        <ShowPic>133</ShowPic>        <PlayerNum>6</PlayerNum>        <PlayerMode>3V3</PlayerMode>        <ShopID>1001</ShopID>        <CameraType>1</CameraType>        <IsAI>1</IsAI>        <IsNormal>1</IsNormal>        <IsRank>1</IsRank>        <IsTrain>0</IsTrain>        <IsDungeon>0</IsDungeon>    </info>    <info MapID="1000">        <LoadScene>pvp_000</LoadScene>        <MiniMap>MiniMap_002</MiniMap>        <NameCn>奥斯深渊新手</NameCn>        <ACameraPos>100</ACameraPos>        <BCameraPos>105</BCameraPos>        <ShowPic>133</ShowPic>        <PlayerNum>6</PlayerNum>        <PlayerMode>3V3</PlayerMode>        <ShopID>1001</ShopID>        <CameraType>1</CameraType>        <IsAI>0</IsAI>        <IsNormal>0</IsNormal>        <IsRank>0</IsRank>        <IsTrain>1</IsTrain>        <IsDungeon>0</IsDungeon>    </info></MapLoadCfg>

然后是代码:

using System;using UnityEngine;using System.Xml;using System.Collections.Generic;public enum EBattleMatchType{    EBMT_NONE,    //人机    EBMT_Ai,    //普通    EBMT_Normal,    //天梯    EBMT_Rank,    //新手    EBMT_Train,    //副本    EBMT_Dungeon,}//主要是从config中读取并持有地图信息//继承单例public class MapLoadConfig: Singleton<MapLoadConfig>{    //uint:mapID    //MapInfo:MapInfo    //目前来说,这个项目里面有三个Map    private Dictionary<uint, MapInfo> mMapList = new Dictionary<uint, MapInfo>();    private XmlDocument mXmlDoc = null;    //构造函数    public MapLoadConfig()    {        //编辑器内的目录为Assets/Resources/Config        ReadConfig ("Config/MapLoadCfg");    }    //根据MapId来取得Map信息    public MapInfo GetMapInfo(uint id)    {        if (mMapList.ContainsKey(id))        {            return mMapList [id];        }        return null;    }    //根据地图名称来获取Map信息    public MapInfo GetMapInfo(string name)    {        foreach (MapInfo info in mMapList.Values)        {            if (info.mLoadScene == name)            {                return info;            }        }        return null;    }    //通过匹配模式找地图    //把类型是type的地图全部返回    //这里说明每一个匹配模式可以从多张地图中选择一张来玩    public List<MapInfo> GetMapList(EBattleMatchType type)    {        List<MapInfo> mapList = new List<MapInfo> ();        foreach (MapInfo info in mMapList.Values)        {            bool bIs = false;            switch(type)            {            case EBattleMatchType.EBMT_Normal:                bIs = info.mIsNormal;                break;            case EBattleMatchType.EBMT_Ai:                bIs = info.mIsAI;                break;            case EBattleMatchType.EBMT_Rank:                bIs = info.mIsRank;                break;            case EBattleMatchType.EBMT_Train:                bIs = info.mIsTrain;                break;            case EBattleMatchType.EBMT_Dungeon:                bIs = info.mIsDungeon;                break;            case EBattleMatchType.EBMT_NONE:                bIs = true;                break;            }            if (bIs)            {                mapList.Add (info);            }        }        return mapList;    }    //载入配置表    public void ReadConfig(string xmlFilePath)    {        //ResourcesManager部分的东西        ResourceUnit xmlfileUnit = ResourcesManager.Instance.loadImmediate (xmlFilePath, ResourceType.ASSET);        TextAsset xmlfile = xmlfileUnit.Asset as TextAsset;        if (!xmlfile)        {            Debug.LogError ("error infos: 没有找到指定的xml文件:" + xmlFilePath);        }        mXmlDoc = new XmlDocument ();        //加载xml        mXmlDoc.LoadXml (xmlfile.text);        //这个文件里其实也只有这个MapLoadCfg节点        XmlNodeList infoNodeList = mXmlDoc.SelectSingleNode ("MapLoadCfg").ChildNodes;        //(XmlNode xNode in infoNodeList)        for (int i = 0; i < infoNodeList.Count; i++)        {            if ((infoNodeList[i] as XmlElement).GetAttributeNode("MapID") == null)            {                continue;            }            //获取MapID            string mapId = (infoNodeList [i] as XmlElement).GetAttributeNode ("MapID").InnerText;            MapInfo mapInfo = new MapInfo ();            mapInfo.mId = Convert.ToUInt32 (mapId);            //读取信息到MapInfo            foreach (XmlElement xEle in infoNodeList[i].ChildNodes)            {                #region 搜索                switch (xEle.Name)                {                case "LoadScene":                    mapInfo.mLoadScene = Convert.ToString(xEle.InnerText);                    break;                case "MiniMap":                    mapInfo.mMiniMap = Convert.ToString(xEle.InnerText);                    break;                case "NameCn":                    mapInfo.mName = Convert.ToString(xEle.InnerText);                    break;                case "ACameraPos":                    mapInfo.mACameraPos = Convert.ToString(xEle.InnerText);                    break;                case "BCameraPos":                    mapInfo.mBCameraPos = Convert.ToString(xEle.InnerText);                    break;                case "ShowPic":                    mapInfo.mShowPic = Convert.ToString(xEle.InnerText);                    break;                case "PlayerNum":                    mapInfo.mPlayerNum = Convert.ToInt32(xEle.InnerText);                    break;                case "PlayerMode":                    mapInfo.mPlayerMode = Convert.ToString(xEle.InnerText);                    break;                case "CameraType":                    mapInfo.mCameraType = Convert.ToInt32(xEle.InnerText);                    break;                case "IsAI":                    mapInfo.mIsAI = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));                    break;                case "IsNormal":                    mapInfo.mIsNormal = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));                    break;                case "IsRank":                    mapInfo.mIsRank = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));                    break;                case "IsTrain":                    mapInfo.mIsTrain = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));                    break;                case "IsDungeon":                    mapInfo.mIsDungeon = Convert.ToBoolean(Convert.ToInt32(xEle.InnerText));                    break;                case "ShopID":                    mapInfo.mShopID = Convert.ToInt32(xEle.InnerText);                    break;                }                #endregion            }            mMapList.Add (mapInfo.mId, mapInfo);        }    }}//与MapLoadCfg配置文件里的数据对应public class MapInfo{    public uint mId;    //地图ID    public string mName;    //地图名    public string mLoadScene;   //对应场景资源    public string mMiniMap;     //对应小地图    public string mACameraPos;      //基地爆炸相机移动目标点A    public string mBCameraPos;      //基地爆炸相机移动目标点B    public string mShowPic;     //UI地图    public int mPlayerNum;      //总人数    public string mPlayerMode;          //战争模式2v2    public int mCameraType;         //相机类型: 1:斜45度    2:水平    public bool mIsAI;      //是否人机    public bool mIsNormal;      //是否普通    public bool mIsRank;            //是否天梯    public bool mIsTrain;   //是否新手    public bool mIsDungeon;         //是否副本    public int mShopID;}
原创粉丝点击