加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Unity3d 新建xml 读取xml

发布时间:2020-12-16 06:38:37 所属栏目:百科 来源:网络整理
导读:在游戏开发中,Xml经常被用来作为技能配置、地图配置、人物动作配置等配置文件。Unity3d内置的Xml库让我们很方便地就可以新建Xml和读取Xml。 下面是一个例子,新建了一个Xml文档,并且读取它。 using UnityEngine;using System.Collections;using System.IO;

在游戏开发中,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结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读