sábado, 8 de setembro de 2012

Unity3D : Carregar, Ler e Salvar um arquivo XML

Há diversas aplicações para o uso de um arquivo XML, em geral, quando se necessita carregar configurações pré-definidas.

Como carregar?

Uma vez com um arquivo XML dentro da pasta Resources,
exemplo:
<achievement>
 <uniqueid>0</uniqueid>
 <referencename>My Achievement</referencename>
 <goal>Solve until 10 seconds</goal>
 <points>10</points>
</achievement>
using UnityEngine;
using System.Collections;
using System.Xml;


public class XMLEditor : MonoBehaviour
{

    void Awake()
    {
        //Load
        TextAsset textXML = (TextAsset)Resources.Load("myxml.xml", typeof(TextAsset));
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(textXML.text);
    }
}
Desta forma você carrega o XML como um TextAsset da Unity3D

Como ler o arquivo XML?

Ler o arquivo XML é realmente muito simples utilizando as classes da .NET framework


using UnityEngine;
using System.Collections;
using System.Xml;


public class XMLEditor : MonoBehaviour
{
    void Awake()
    {
        //Load
        TextAsset textXML = (TextAsset)Resources.Load("myxml.xml", typeof(TextAsset));
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(textXML.text);

        //Read
        XmlNode root = xml.FirstChild;
        foreach(XmlNode node in root.ChildNodes)
        {
            if (node.FirstChild.NodeType == XmlNodeType.Text)
                Debug.Log(node.InnerText);
        }
    }
}

Obviamente essa é maneira mais simples de ler um XML, e caso o XML possua diversas hierarquias, você deverá implementar seu método de navegação através dos nós.

Como salvar em XML?


using UnityEngine;
using System.Collections;
using System.Xml;


public class XMLEditor : MonoBehaviour
{
    void Awake()
    {
        //Load
        TextAsset textXML = (TextAsset)Resources.Load("myxml.xml", typeof(TextAsset));
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(textXML.text);

        //Read
        XmlNode root = xml.FirstChild;
        foreach(XmlNode node in root.ChildNodes)
        {
            if (node.FirstChild.NodeType == XmlNodeType.Text)
                node.InnerText = "none";
        }

        //Simple Save
        xml.Save(AssetDatabase.GetAssetPath(textXML));
    }
}

E através do AssetDatabase recuperamos o local do arquivo que foi carregado e salvamos por cima.

Eis a maneira mais rápida e fácil de carregar, ler e salvar arquivos XML na Unity3D

Nenhum comentário:

Postar um comentário