【Unity 笔记】XML 数据存储

游戏引擎:Unity 2017版本以上
编程语言:C#
编译平台:Visual Studio 2019

一、了解XML

1.1 什么是XML

  • 可扩展标记语言(EXtensibleMarkupLanguage)
  • 类似于 HTML 的一种标记语言
  • 以 传输数据 为宗旨
  • 标签没有被预定义,需要自行定义标签
  • 具有自我描述性
  • W3C 的推荐标准

1.2 XML与HTML的主要差异

区别焦点
XML被设计用于传输和存储数据数据内容
HTML被设计用于显示数据数据外观

  特别的注意:XML不是HTML的替代。

1.3 文本中的XML

  下面是John写给George的便签,存储为XML:

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

  XML的内容仅为纯文本内容。受益于XML的标签不确定性,我们可以定义我们需求的标签与标签内容,来更加便于实现我们的现实需求。如下图所示:

<?xml version="1.0" encoding="utf-8"?>
<root>
  <locale name="zh_CN" label="简体中文"/>
  <locale name="en_US" label="英文"/>
</root>

  我们定义了两个标签分别代表zh_CNen_US两个语种。甚至可以添加更多语种。亦或是如下图所示:

<?xml version="1.0" encoding="UTF-8"?>
<root_CharacterTemplateData>
  <CharacterTemplateData name="安琪拉">
    <JobId>22</JobId>
    <JobMode>Wizard</JobMode>
  </CharacterTemplateData>
  <CharacterTemplateData id="1001" name="战士">
    <JobId>3</JobId>
    <JobMode>Warrior</JobMode>
    <InitForce>120</InitForce>
  </CharacterTemplateData>
  <CharacterTemplateData id="1002" name="农夫">
    <JobId>4</JobId>
    <JobMode>Farmer</JobMode>
    <InitForce>20</InitForce>
  </CharacterTemplateData>
  <CharacterTemplateData id="1003" name="射手">
    <JobId>5</JobId>
    <JobMode>Shooter</JobMode>
    <InitForce>120</InitForce>
  </CharacterTemplateData>
</root_CharacterTemplateData>

二、操作

2.0 引用空间

using System.Xml;

C# 提供了对XML文件的读取方法。


2.1 XML路径及文件名

//XML文件名
private string fileName = "languages.xml";

/// <summary>
/// 文件路径
/// </summary>
private string FilePath { get { return Application.streamingAssetsPath + "/" + fileName; } }

  特别的需要注意:文件的命名严格要求有格式后缀名,或在路径中有表示。另关于Application.streamingAssetsPath为我们电脑上的存储路径,更多了解可参考Unity文档 Application.StreamingAssetsPath

2.2 添加Header与Root节点

//xmlDoc 实例
XmlDocument xmlDoc = new XmlDocument();
//添加头部信息
XmlDeclaration header = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDoc.AppendChild(header);
//创建根节点  (这里命名根节点为 root_CharacterTemplateData);
XmlElement root = xml.CreateElement("root_CharaterTemplateData");
//添加根节点
xmlDoc.AppendChild(root);

  其中,headerCreateXmlDeclaration() 请参考 CSDN博主:快乐生活2009 —— xml写出Declaration(version)
的详细讲解。

2.3.1 添加一级节点

//创建一级子节点 命名为CharaterTemplateData
XmlEmlement firstPoint = xmlDoc.CreateElement("CharacterTemplateData");
root.AppendChild(firstPoint);

  需注意的是,一级节点是仅次于根节点。故这里选择root.AppendChild(e);。如果为xmlDoc.AppendChild(e);,则该一级节点与根节点同级,并不是真正意义上的一级节点。

2.3.2 添加二级节点(续)

  同理,按照一级节点的理解,我们添加二级节点。

//创建一级子节点 命名为CharaterTemplateData
XmlEmlement secondPoint = xmlDoc.CreateElement("CharacterTemplateData");
firstPoint.AppendChild(secondPoint);

2.4 保存内容

xmlDoc.Save(FilePath);

  这里的FilePath已经被我们在之前做好了封装。

2.5 查看内容

2.6 扩展

  受限制于面向的平台,主要出现以 PC 、 Android 、 IOS 三大平台。这里针对于Android平台,更改【2.1 XML路径及文件名】的FilePath

private string FilePath 
{
	 get 
	 { 
	 	if(Application.platform == RuntimePlatform.Android)
	 		return Application.persistentDataPath + "/" + fileName;
	 	return Application.streamingAssetsPath + "/" + fileName; 
	 }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值