1.在读本文前,你需要简单了解一下XML和XML DOM,推荐W3CSchool的教程http://www.w3school.com.cn/x.asp。简单了解下XML的元素、属性等概念和DOM的节点概念就行。
XML:可扩展标记语言。它是被设计用来传输和存取数据的。
例如:
李逍遥
1
100
100
100
100
100
是文档声明(Declaration)
PlayerID就是属性
DOM:文件对象模型。它是一个是程序和脚本有能力动态访问和更新文档的内容,结构以及样式的平台和语言无关的接口。
根据DOM,XML中的每个成分都可以看成一个节点(XmlNode):
2..NET对XML进行操作的类位于System.Xml命名空间下。这里我们主要介绍XmlNode和XmlDocument两个类。
XmlNode 是 DOM 中的 .NET 实现的基类。 它支持 XPath 选择并提供编辑功能。 XmlDocument 类扩继承自XmlNode,并代表 XML 文档。 可使用 XmlDocument 加载和保存 XML 数据。 它还含有用于创建节点的方法。
OK,下面我们通过一个具体小例子看看Unity3D如何从XML读取数据。
首先,我们新建一个名为Players的XML文件,内容如下:
李逍遥
1
100
100
100
100
100
然后,我们新建一个C#脚本,命名为Player,用来存储角色信息,内容如下:
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour {
public string name;
public int level;
public int hp;
public int mp;
public int attack;
public int defend;
public int speed;
}
新建一个Cube,把Player脚本绑到Cube上。
最后,我们编写一个PlayersList文件用来读取XML到unity中:
/*
* XmlDocument:C#中可以用来读写XML文档的一个类。注意一个XmlDocument对象也是一个节点。
* 重要属性:
* Name:节点名称
* Value:节点的值
* ChildNodes:所有子节点
* ParentNode:父节点
* DocumentElement:获取节点的根元素
* 重要方法:
* Load(string):从指定路径加载XML文档
* SelectSingleNode(string):获取指定节点
*
* XmlElement:XML中的元素
* 重要属性:
* InnerText:元素中间的文本
*/
using UnityEngine;
using System.Collections;
using System.Xml;
public class PlayersList : MonoBehaviour {
public Player lixiaoyao;
// Use this for initialization
void Start () {
ReadXml();
}
void ReadXml()
{
XmlDocument playerXml = new XmlDocument();
playerXml.Load(".\\Assets\\Players.xml");
XmlElement players = playerXml.DocumentElement;//获取根元素
foreach (XmlNode player in players.ChildNodes)//遍历所有子节点
{
foreach (XmlNode node in player.ChildNodes)
{
XmlElement xe = (XmlElement)node;
switch (xe.Name)
{
case "name":
lixiaoyao.name = xe.InnerText;
break;
case "level":
lixiaoyao.level = int.Parse(xe.InnerText);
break;
case "attack":
lixiaoyao.attack = int.Parse(xe.InnerText);
break;
case "defend":
lixiaoyao.defend = int.Parse(xe.InnerText);
break;
case "hp":
lixiaoyao.hp = int.Parse(xe.InnerText);
break;
case "mp":
lixiaoyao.mp = int.Parse(xe.InnerText);
break;
case "speed":
lixiaoyao.speed = int.Parse(xe.InnerText);
break;
}
}
}
}
}
把这个脚本挂到MainCamera上,拖动Cube给这个脚本的lixiaoyao赋值。
运行游戏,你会发现XML文件里的数据被读取到Cube的Player脚本里了。