Unity3d如何读写XML文件

今天顺便学习下unity3d下如何读写XML文件@@@@@@@@@@@@@

1、首先搭建好一个场景。如图:

Unity3d如何读写XML文件_第1张图片

场景中的Sphere是要进行操作的对象,为了测试XML的读写的准确性,我对Sphere(MeshFilter)的Mesh属性的网格顶点的信息进行读取和保存。

XmlTest是我要测试的脚本,把它拖到摄像机对象上就可以了。

2、下面对代码进行编写

using UnityEngine;
using System.Collections;
using System.IO;
using System.Xml;
using System.Collections.Generic;
public class XmlTest : MonoBehaviour {
    //球对象
    public GameObject _sphere;
    //网格对象
    public Mesh myMesh;
    void Awake()
    {
        //找到球对象
        _sphere = GameObject.Find("Sphere");
        myMesh = _sphere.GetComponent().mesh;
    }
// Use this for initialization
void Start () {
   //1、首先生成Xml文件
        //WriteXML();

        //2、对Sphere的Mesh进行变形(按下Q键)
      /*
            Vector3[] vertices = myMesh.vertices;
            for (int i = 0; i < vertices.Length; i++)
            {


                vertices[i] = new Vector3(3 * vertices[i].x, vertices[i].y, 3 * vertices[i].z);


            }
            myMesh.vertices = vertices;
            myMesh.RecalculateBounds();
      */


        //3、对Sphere的Mesh进行还原(按下W键)
    
            ReadXML();
            Vector3[] vertices = myMesh.vertices;
            for (int i = 0; i < vertices.Length; i++)
            {
                vertices[i] = listDic[i].Value;
                Debug.Log(listDic[i].Value);
            }
            myMesh.vertices = vertices;
            myMesh.RecalculateBounds();
     


        
         


    }


    private void WriteXML()
    {
        //保存Xml文件的路径
        string _path = Application.dataPath + @"\myTest\writeXml.xml";
        if (File.Exists(_path))
            return;


        XmlDocument _newXml = new XmlDocument();
        //根节点
        XmlElement _nodeRoot = _newXml.CreateElement("VerticesRoot");
        //遍历网格的顶点信息
        for (int i = 0; i < myMesh.vertices.Length; i++)
        {
            XmlElement _tempNode = _newXml.CreateElement("VecElectment" + i);
            _tempNode.SetAttribute("Vector3", myMesh.vertices[i].ToString());
            _tempNode.SetAttribute("Index",  i.ToString());
            _nodeRoot.AppendChild(_tempNode);
           
        }


        _newXml.AppendChild(_nodeRoot);
        _newXml.Save(_path);
    }


    private void ReadXML()
    {
        string _path = Application.dataPath + @"\myTest\writeXml.xml";
        if (!File.Exists(_path))
            return;


        listDic.Clear();


        XmlDocument _newXml = new XmlDocument();


        _newXml.Load(_path);


        XmlElement _nodeRoot = (XmlElement)_newXml.SelectSingleNode("VerticesRoot");


        XmlNodeList _nodeList = _nodeRoot.ChildNodes;


        for (int i = 0; i < _nodeList.Count; i++)
        {
            XmlElement _node = (XmlElement)_nodeList[i];


            string _str = _node.GetAttribute("Vector3");
            //对"(x,y,z)"进行分割
            string[] _strArr = _str.Split('(', ',', ')');


            KeyValuePair _dic = new KeyValuePair(int.Parse(_node.GetAttribute("Index")), new Vector3(float.Parse(_strArr[1]), float.Parse(_strArr[2]), float.Parse(_strArr[3])));


            listDic.Add(_dic);
        }
       
    }

    //保存读取的节点信息
    private List> listDic = new List>();

}

1、变形前

Unity3d如何读写XML文件_第2张图片

2、变形后Unity3d如何读写XML文件_第3张图片

3、还原的会变形,还请大神指教,读取数据没问题

Unity3d如何读写XML文件_第4张图片


你可能感兴趣的:(unity3d)