在游戏开发中,Xml经常被用来作为技能配置、地图配置、人物动作配置等配置文件。Unity3d内置的Xml库让我们很方便地就可以新建Xml和读取Xml。
下面是一个例子,新建了一个Xml文档,并且读取它。
using UnityEngine; using System.Collections; using System.IO; using System.Xml; using System.Text; public class XmlTest : MonoBehavIoUr { XmlElement m_roleMotions = null;//人物动作; XmlElement m_skills = null;//人物技能; // Use this for initialization void Start () { //CreateXml(); //ReadXml(); ReadFileToXml(); } // Update is called once per frame void Update () { } void CreateXml() { string filepath = Application.dataPath + "/Resources/1013000.xml"; if (!File.Exists(filepath)) { //创建xml实例; XmlDocument xmlDoc = new XmlDocument(); //创建character; XmlElement root = xmlDoc.CreateElement("character"); /***创建roleMotions Start***/ XmlElement roleMotions = xmlDoc.CreateElement("roleMotions"); XmlElement motionInfo = xmlDoc.CreateElement("motionInfo"); XmlElement motion = xmlDoc.CreateElement("motion"); motion.SetAttribute("clipName","enter_ready"); motion.SetAttribute("isLoop","false"); motion.SetAttribute("moveEndTime","0"); motion.SetAttribute("moveStartTime","0"); motionInfo.AppendChild(motion); roleMotions.AppendChild(motionInfo); root.AppendChild(roleMotions); /***创建roleMotions End***/ /***创建skills Start***/ XmlElement skills = xmlDoc.CreateElement("skills"); XmlElement skill = xmlDoc.CreateElement("skill"); skill.SetAttribute("name","普攻"); skill.SetAttribute("motion","RMT_Attack1"); skills.AppendChild(skill); root.AppendChild(skills); /***创建skills End***/ xmlDoc.AppendChild(root); xmlDoc.Save(filepath); } else { Debug.LogError("File hava exist"); } } void ReadXml() { string filepath = Application.dataPath + "/Resources/1013000.xml"; if (!File.Exists(filepath)) { Debug.LogError("xml file not exist"); return; } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filepath); //获取所有子节点; XmlNodeList nodeList = xmlDoc.SelectSingleNode("character").ChildNodes; foreach(XmlNode child in nodeList) { if (child.Name == "roleMotions") { m_roleMotions = child as XmlElement; } else if (child.Name == "skills") { m_skills = child as XmlElement; } } Debug.Log("m_roleMotions = " + m_roleMotions.InnerXml); Debug.Log("m_skills = " + m_skills.InnerXml); } void ReadFileToXml() { string filepath = "1013000"; GameObject obj = Resources.Load(filepath) as GameObject; TextAsset xmlAsset = Resources.Load(filepath,typeof(TextAsset)) as TextAsset; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlAsset.text); //获取所有子节点; XmlNodeList nodeList = xmlDoc.SelectSingleNode("character").ChildNodes; foreach (XmlNode child in nodeList) { if (child.Name == "roleMotions") { m_roleMotions = child as XmlElement; } else if (child.Name == "skills") { m_skills = child as XmlElement; } } Debug.Log("m_roleMotions = " + m_roleMotions.InnerXml); Debug.Log("m_skills = " + m_skills.InnerXml); } }
新建的Xml文档内容如下:
<character> <roleMotions> <motionInfo> <motion clipName="enter_ready" isLoop="false" moveEndTime="0" moveStartTime="0" /> </motionInfo> </roleMotions> <skills> <skill name="普攻" motion="RMT_Attack1" /> </skills> </character>
读取Xml结果: