游戏引擎:Unity 2017版本以上
编程语言:C#
编译平台:Visual Studio 2019
一、了解XML
1.1 什么是XML
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_CN
、en_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);
其中,header
中 CreateXmlDeclaration()
请参考 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;
}
}