首页 > 代码库 > Unity3d 新建xml 读取xml

Unity3d 新建xml 读取xml

在游戏开发中,Xml经常被用来作为技能配置、地图配置、人物动作配置等配置文件。Unity3d内置的Xml库让我们很方便地就可以新建Xml和读取Xml。

下面是一个例子,新建了一个Xml文档,并且读取它。

[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using System.IO;  
  4. using System.Xml;  
  5. using System.Text;  
  6.   
  7. public class XmlTest : MonoBehaviour {  
  8.   
  9.     XmlElement m_roleMotions = null;//人物动作;  
  10.     XmlElement m_skills = null;//人物技能;  
  11.   
  12.     // Use this for initialization  
  13.     void Start () {  
  14.         //CreateXml();  
  15.         //ReadXml();  
  16.         ReadFileToXml();  
  17.     }  
  18.       
  19.     // Update is called once per frame  
  20.     void Update () {  
  21.       
  22.     }  
  23.   
  24.     void CreateXml()  
  25.     {  
  26.         string filepath = Application.dataPath + "/Resources/1013000.xml";  
  27.         if (!File.Exists(filepath))  
  28.         {  
  29.             //创建xml实例;  
  30.             XmlDocument xmlDoc = new XmlDocument();  
  31.   
  32.             //创建character;  
  33.             XmlElement root = xmlDoc.CreateElement("character");  
  34.   
  35.             /***创建roleMotions Start***/  
  36.             XmlElement roleMotions = xmlDoc.CreateElement("roleMotions");  
  37.             XmlElement motionInfo = xmlDoc.CreateElement("motionInfo");  
  38.             XmlElement motion = xmlDoc.CreateElement("motion");  
  39.             motion.SetAttribute("clipName", "enter_ready");  
  40.             motion.SetAttribute("isLoop", "false");  
  41.             motion.SetAttribute("moveEndTime", "0");  
  42.             motion.SetAttribute("moveStartTime", "0");  
  43.             motionInfo.AppendChild(motion);  
  44.             roleMotions.AppendChild(motionInfo);  
  45.             root.AppendChild(roleMotions);  
  46.             /***创建roleMotions End***/  
  47.   
  48.             /***创建skills Start***/  
  49.             XmlElement skills = xmlDoc.CreateElement("skills");  
  50.             XmlElement skill = xmlDoc.CreateElement("skill");  
  51.             skill.SetAttribute("name", "普攻");  
  52.             skill.SetAttribute("motion", "RMT_Attack1");  
  53.             skills.AppendChild(skill);  
  54.             root.AppendChild(skills);  
  55.             /***创建skills End***/  
  56.   
  57.             xmlDoc.AppendChild(root);  
  58.   
  59.             xmlDoc.Save(filepath);  
  60.         }  
  61.         else  
  62.         {  
  63.             Debug.LogError("File hava exist");  
  64.         }  
  65.     }  
  66.   
  67.     void ReadXml()  
  68.     {  
  69.         string filepath = Application.dataPath + "/Resources/1013000.xml";  
  70.         if (!File.Exists(filepath))  
  71.         {  
  72.             Debug.LogError("xml file not exist");  
  73.             return;  
  74.         }  
  75.         XmlDocument xmlDoc = new XmlDocument();  
  76.         xmlDoc.Load(filepath);  
  77.   
  78.         //获取所有子节点;  
  79.         XmlNodeList nodeList = xmlDoc.SelectSingleNode("character").ChildNodes;  
  80.         foreach(XmlNode child in nodeList)  
  81.         {  
  82.             if (child.Name == "roleMotions")  
  83.             {  
  84.                 m_roleMotions = child as XmlElement;  
  85.             }  
  86.             else if (child.Name == "skills")  
  87.             {  
  88.                 m_skills = child as XmlElement;  
  89.             }  
  90.         }  
  91.   
  92.         Debug.Log("m_roleMotions = " + m_roleMotions.InnerXml);  
  93.         Debug.Log("m_skills = " + m_skills.InnerXml);  
  94.     }  
  95.   
  96.     void ReadFileToXml()  
  97.     {  
  98.         string filepath = "1013000";  
  99.         GameObject obj = Resources.Load(filepath) as GameObject;  
  100.         TextAsset xmlAsset = Resources.Load(filepath,typeof(TextAsset)) as TextAsset;  
  101.   
  102.         XmlDocument xmlDoc = new XmlDocument();  
  103.         xmlDoc.LoadXml(xmlAsset.text);  
  104.   
  105.         //获取所有子节点;  
  106.         XmlNodeList nodeList = xmlDoc.SelectSingleNode("character").ChildNodes;  
  107.         foreach (XmlNode child in nodeList)  
  108.         {  
  109.             if (child.Name == "roleMotions")  
  110.             {  
  111.                 m_roleMotions = child as XmlElement;  
  112.             }  
  113.             else if (child.Name == "skills")  
  114.             {  
  115.                 m_skills = child as XmlElement;  
  116.             }  
  117.         }  
  118.   
  119.         Debug.Log("m_roleMotions = " + m_roleMotions.InnerXml);  
  120.         Debug.Log("m_skills = " + m_skills.InnerXml);  
  121.     }  
  122.   
  123. }  


新建的Xml文档内容如下:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <character>  
  2.   <roleMotions>  
  3.     <motionInfo>  
  4.       <motion clipName="enter_ready" isLoop="false" moveEndTime="0" moveStartTime="0" />  
  5.     </motionInfo>  
  6.   </roleMotions>  
  7.   <skills>  
  8.     <skill name="普攻" motion="RMT_Attack1" />  
  9.   </skills>  
  10. </character>  


读取Xml结果:

Unity3d 新建xml 读取xml