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

Unity3D使用XML存取数据(一)

发布时间:2020-12-16 06:20:57 所属栏目:百科 来源:网络整理
导读:1.在读本文前,你需要简单了解一下XML和XML DOM,推荐W3CSchool的教程http://www.w3school.com.cn/x.asp。简单了解下XML的元素、属性等概念和DOM的节点概念就行。 XML:可扩展标记语言。它是被设计用来传输和存取数据的。 例如: ?xml version="1.0" encoding

1.在读本文前,你需要简单了解一下XML和XML DOM,推荐W3CSchool的教程http://www.w3school.com.cn/x.asp。简单了解下XML的元素、属性等概念和DOM的节点概念就行。

XML:可扩展标记语言。它是被设计用来传输和存取数据的。

例如:

<?xml version="1.0" encoding="utf-8"?>
<players>
  <player PlayerID="1">
  <name>李逍遥</name>
  <level>1</level>
  <hp>100</hp>
  <mp>100</mp>
  <attack>100</attack>
  <defend>100</defend>
  <speed>100</speed>
  </player>
</players>

<?xml version="1.0" encoding="utf-8"?>是文档声明(Declaration)

<player></player>就是元素

PlayerID就是属性

DOM:文件对象模型。它是一个是程序和脚本有能力动态访问和更新文档的内容,结构以及样式的平台和语言无关的接口。

根据DOM,XML中的每个成分都可以看成一个节点(XmlNode):

  • 每个XML文档(XmlDocument)是一个文档节点
  • 每个XML元素(XmlElement)是一个元素节点
  • 包含在标签中间的文本是一个文本节点
  • 每个XML属性(XmlAttribute)是一个属性节点

2..NET对XML进行操作的类位于System.Xml命名空间下。这里我们主要介绍XmlNode和XmlDocument两个类。

XmlNode 是 DOM 中的 .NET 实现的基类。 它支持 XPath 选择并提供编辑功能。 XmlDocument 类扩继承自XmlNode,并代表 XML 文档。 可使用 XmlDocument 加载和保存 XML 数据。 它还含有用于创建节点的方法。

OK,下面我们通过一个具体小例子看看Unity3D如何从XML读取数据。

首先,我们新建一个名为Players的XML文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<players>
  <player>
  <name>李逍遥</name>
  <level>1</level>
  <hp>100</hp>
  <mp>100</mp>
  <attack>100</attack>
  <defend>100</defend>
  <speed>100</speed>
  </player>
</players>
然后,我们新建一个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(".AssetsPlayers.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脚本里了。

(编辑:李大同)

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

    推荐文章
      热点阅读