zoukankan      html  css  js  c++  java
  • Unity XML的使用

    目录

    C#中的XML

    XML文档对象模型(DOM)是C#里一种很直观的方式处理XML的类,在System.Xml命名空间中。

    常用的DOM类

    XML开发实例

    在实际开发中,各种的配置数据肯定都是策划决定的。就比如每个关卡的名字,完成关卡后获得的金钱和经验。而微软的Excel可以一键转换为XML,所以策划可以直接把数据写在Excel中,转换为XML就可以直接把信息加载保存到游戏中。

    XML代码

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    	<item ID="10001">
    		<sceneName>01SceneGame</sceneName>
    		<playerBornPos>-10,12.3,11.5</playerBornPos>
    		<playerBornRote>0,145,0</playerBornRote>
    		<exp>1250</exp>
    		<coin>980</coin>
    	</item>
    	<item ID="10002">
    		<sceneName>02SceneGame</sceneName>
    		<playerBornPos>-10,13.2,11.5</playerBornPos>
    		<playerBornRote>0,145,0</playerBornRote>
    		<exp>1350</exp>
    		<coin>1080</coin>
    	</item>
    </root>
    

    C#中对应的类

    public class MapData
    {
    public int id; //场景名 public string sceneName; //角色初始出生位置和方向 public Vector3 playerBornPos; public Vector3 playerBornRote;   //通关后获得的金币和经验 public int coin; public int exp; }

      

    读取XML信息到字典

        /// <summary>
        /// 保存地图信息的字典
        /// </summary>    
        private Dictionary<int, MapData> mapDataDict = new Dictionary<int, MapData>();
    
        /// <summary>
        /// 初始化地图信息
        /// </summary>
        /// <param name="path">XML文件位置</param>
        private void InitMapXML(string path)
        {
            TextAsset nameText = Resources.Load<TextAsset>(path);
            if (nameText == null)
            {
                Debug.Log("xml file:" + path + "not exist", LogType.Error);
            }
            else
            {
    //声明一个XmlDocement对象,加载XML文件 XmlDocument doc = new XmlDocument(); doc.LoadXml(nameText.text); //获取root下的所有节点 XmlNodeList nodeList = doc.SelectSingleNode("root").ChildNodes; for (int i = 0; i < nodeList.Count; i++) { XmlElement element = nodeList[i] as XmlElement; if (element.GetAttributeNode("ID") == null) continue; int id = Convert.ToInt32(element.GetAttributeNode("ID").InnerText);
    //每个节点下所有数据转换为一个MapData类 MapData mapData = new MapData { ID = id, }; foreach (XmlElement ele in nodeList[i].ChildNodes) { switch (ele.Name) { case "sceneName": mapData.sceneName = ele.InnerText; break; case "playerBornPos": { string[] temp = ele.InnerText.Split(','); mapData.playerBornPos = new Vector3(float.Parse(temp[0]), float.Parse(temp[1]), float.Parse(temp[2])); } break; case "playerBornRote": { string[] temp = ele.InnerText.Split(','); mapData.playerBornRote = new Vector3(float.Parse(temp[0]), float.Parse(temp[1]), float.Parse(temp[2])); } break; case "coin": mapData.coin = int.Parse(ele.InnerText); break; case "exp": mapData.exp = int.Parse(ele.InnerText); break; } } mapDataDict.Add(id, mapData); } } } /// <summary> /// 根据id获取对应数据 /// </summary> public MapData GetMapData(int id) { MapData data = null; mapDataDict.TryGetValue(id, out data); return data; }

      

  • 相关阅读:
    最后一周作业
    第十四,十五周作业
    第七周作业
    第六周作业
    第四周作业
    第三周作业
    第二周作业
    二学期第三次作业
    二学期第二次作业
    二学期第一次作业
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/12874266.html
Copyright © 2011-2022 走看看