Unity零基础到入门☀️| Unity中的数据存储 XML

举报
呆呆敲代码的小Y 发表于 2021/10/29 16:56:28 2021/10/29
【摘要】 📢前言本文章是Unity零基础到入门专栏的系列文章适合对Unity3D引擎感兴趣的小伙伴学习,偏向于新手学习!本篇文章就来介绍一下Unity中三种基本的数据存储方式:PlayerPrefs、XML、JSON由于是偏向于新手教程,所以不会介绍的很深刻,看完之后掌握 基本的数据读取 就足够了!下面一起来看一下吧!暂时没时间看可以直接点赞收藏不迷路,让你快速学会不加班! 🎬Unity中的三种...

请添加图片描述


📢前言

  • 本文章是Unity零基础到入门专栏的系列文章
  • 适合对Unity3D引擎感兴趣的小伙伴学习,偏向于新手学习!
  • 本篇文章就来介绍一下Unity中三种基本的数据存储方式:PlayerPrefsXMLJSON
  • 由于是偏向于新手教程,所以不会介绍的很深刻,看完之后掌握 基本的数据读取 就足够了!
  • 下面一起来看一下吧!暂时没时间看可以直接点赞收藏不迷路,让你快速学会不加班!

🎬Unity中的三种数据存储

数据存储 也可以称为 数据持久化,不管是使用哪种语言、哪种开发工具
关于数据存储这一块对于整个项目以及开发团队来说都是非常重要的一块!

举个例子,我们在各种游戏里面充钱买装备、买皮肤等等操作的背后,都是有一个庞大的数据系统在支持。
一旦发生数据泄露、删库跑路等等事故,对公司来说也都是一个巨大的损失!

那本篇文章就来介绍一下在Unity中的数据存储常用的几种方式: PlayerPrefsXMLJSON

废话不多说,直接开始上干货了!


🏳️‍🌈XML的结构

先来看一下XML的结构
在这里插入图片描述
继承结构
在这里插入图片描述
XMLNode(节点类)

XMLNode 属性和方法 说明
InnerText 获取或设置结点及所有子节点的值(仅元素结点拥有)
Value 获取或设置结点的值(仅元素结点拥有)
AppendChild 将指定的结点添加到该节点的子节点列表的末尾
ChildNodes 获取结点的所有子节点
FirstChild 获取节点的第一个子节点
HasChildNodes 判断该节点是否有任何子节点
SelectSingleNode 选择匹配XPath表达式的第一个XmlNode
SelectSingleNodes 选择匹配XPath表达式的所有XmlNode

XMLElement(XML元素类)

XMLElement 方法 说明
SetAttribute 设置具有指定名称的特性的值
HasAttributes 判断该元素结点是否具有属性
GetAttribute 返回具有指定名称的属性值

XMLDocument文档类

XMLDocument 方法 说明
CreateXmlDeclaration 创建一个具有指定值的XmlDeclaration节点
CreateElement 创建具有指定名称的元素
CreateNode 创建具有指定节点类型、Name和NamespaceURL的XMLNode
AppendChild 将指定的节点添加到该节点的子节点列表的末尾(继承自XmlNode)
Save 将XML文档保存到指定的文件

🏳️‍🌈生成XML文件

Unity引擎中如何生成本地XML数据步骤如下:
在这里插入图片描述
示例代码

using UnityEngine;
using UnityEngine.UI;
using System.Xml;

public class DataTest : MonoBehaviour
{
    public Button b1;
    void Start()
    {
        b1.onClick.AddListener(CreateXML);
    }
    public void CreateXML()
    {
        //创建xml文件
        XmlDocument doc = new XmlDocument();
        //创建xml头
        XmlNode xmlNode = doc.CreateXmlDeclaration("1.0", "utf-8", null);
        //添加xml头
        doc.AppendChild(xmlNode);
        //创建xml根节点
        XmlElement root = doc.CreateElement("users");
        //添加xml根节点
        doc.AppendChild(root);

        //通过XmlNode创建根节点的子节点
        XmlNode xn_enement = doc.CreateNode(XmlNodeType.Element, "Name", null);
        XmlNode xn_enement2 = doc.CreateNode(XmlNodeType.Element, "Age", null);
        //设置子节点的值
        xn_enement.InnerText = "张三";
        xn_enement2.InnerText = "18";
        //创建属性
        XmlAttribute xa = doc.CreateAttribute("name");
        XmlAttribute xa2 = doc.CreateAttribute("age");
        //设置属性值
        xa.Value = "12345";
        xa2.Value = "";
        //获取元素的document
        XmlDocument xd = xn_enement.OwnerDocument;
        //设置元素属性
        xn_enement.Attributes.SetNamedItem(xa);
        xn_enement2.Attributes.SetNamedItem(xa2);


        //通过XmlElement再创建一个根节点的子节点
        XmlElement element = doc.CreateElement("sex");
        element.SetAttribute("性别", "");
        element.InnerText = "男";

        //添加到子节点到root结点
        root.AppendChild(xn_enement);
        root.AppendChild(xn_enement2);
        root.AppendChild(element);

        //保存xml
        doc.Save(Application.dataPath+"/test.xml");  
    }
}

运行结果:
在这里插入图片描述
在这里插入图片描述
上述示例代码中姓名name和年龄age是通过XmlNode创建节点的方式添加的数据

性别sex则是通过XmlElement创建生成的数据,从结果来看添加的数据都一样

实际创建的时候要根据节点和元素的不同严格创建,这里只是提供了一个示例方法!


🏳️‍🌈读取Xml文件并添加数据

上面既然说了怎样生成一个xml,那就再来写一个怎样读取和添加数据的示例吧

上代码:

    void AddXMLData()
    {
        string path = Application.dataPath + "/test3.xml";
        if (File.Exists(path))
        {
            XmlDocument xml = new XmlDocument();
            xml.Load(path);
            XmlNode root = xml.SelectSingleNode("users");

            XmlElement elementChild1 = xml.CreateElement("Hobby");
            elementChild1.SetAttribute("爱好", "");
            elementChild1.InnerText = "睡大觉";

            //把节点添加至xml中,注意他们之间的先后顺序,这是生成XML文件的顺序
            root.AppendChild(elementChild1);
            //最后保存文件
            xml.Save(path);
        }
    }

加载xml文件很简单,找到对应的XML文件路径,使用xml.Load进行加载即可!

然后再通过找到节点,按照层级添加数据即可!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。