Unity3d读取XML文档
- 之前看过很多人总结的unity3d读取XML,各式各样的都有,今天心血来潮,自己也总结一篇供大家参考,如有不当,欢迎大家留言讨论,废话不多说了,进入正题,先上个效果图吧
- 编写xnl文档,为了方便各种数据直接转化显示,我特意凑了5种不同的数据类型供大家参考
- 新建空物体LoadXml,编写LoadingXML脚本,进行读取文件
以下就是读取的全过程,对需要调取的数据进行封装,并提供get,set方法方便外界调用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Xml;
public class LoadingXML : MonoBehaviour
{
public static LoadingXML instance;
private string xmlfilePath;
private int id;
private string name;
private byte age;
private char sex;
private float grade;
public int Id { get => id; set => id = value; }
public string Name { get => name; set => name = value; }
public byte Age { get => age; set => age = value; }
public char Sex { get => sex; set => sex = value; }
public float Grade { get => grade; set => grade = value; }
void Awake()
{
instance = this;
//声明xml文件的路径
xmlfilePath = Application.streamingAssetsPath + "/database.xml";
if (File.Exists(xmlfilePath))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlfilePath);
//得到根节点
XmlNode xn = xmlDoc.SelectSingleNode("students");
//得到根节点的所有子节点
XmlNodeList xnl = xn.ChildNodes;
// 将节点转换为元素,便于得到节点的属性值
foreach (XmlNode xn1 in xnl)
{
// 将节点转换为元素,便于得到节点的属性值
XmlElement xe = (XmlElement)xn1;
//将读取的数据转化为int
Id = int.Parse(xe.GetAttribute("Id"));
Name = xe.GetAttribute("Name").ToString();
//得到book节点的子节点
XmlNodeList xnIO = xe.ChildNodes;
//将读取的数据转化为byte
Age = byte.Parse(xnIO.Item(0).InnerText);
//将读取的数据转化为char
Sex = char.Parse(xnIO.Item(1).InnerText);
//将读取的数据转化为float
Grade = float.Parse(xnIO.Item(2).InnerText);
}
}
else {
Debug.Log("weifaxian");
}
}
5.在unity3d建立5个text用于显示文本,如下:
6.新建空物体ManagerUI,并编写脚本LoadUIData,下面直接上脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LoadUIData : MonoBehaviour
{
private Text Tx_01;
private Text Tx_02;
private Text Tx_03;
private Text Tx_04;
private Text Tx_05;
// Start is called before the first frame update
void Start()
{
Tx_01 = GameObject.Find("Canvas/Tx_01").GetComponent<Text>();
Tx_02 = GameObject.Find("Canvas/Tx_02").GetComponent<Text>();
Tx_03 = GameObject.Find("Canvas/Tx_03").GetComponent<Text>();
Tx_04 = GameObject.Find("Canvas/Tx_04").GetComponent<Text>();
Tx_05 = GameObject.Find("Canvas/Tx_05").GetComponent<Text>();
LoadData();
}
void LoadData()
{
//int转化为string
Tx_01.text = (LoadingXML.instance.Id).ToString();
Tx_02.text = LoadingXML.instance.Name;
//byte转化为string
Tx_03.text = (LoadingXML.instance.Age).ToString();
//char转化为string
Tx_04.text = (LoadingXML.instance.Sex).ToString();
//float转化为string
Tx_05.text = (LoadingXML.instance.Grade).ToString();
}
7.运行即可看到效果