Unity数据持久化
三、XML数据持久化
3.1 XML基础概念
3.1.1 什么是XML
XML(eXtensible Markup Language)**是一种可扩展的标记语言,用于存储和传输数据。它具有以下特点:
- 结构化:数据以层次结构组织
- 可读性:人类和机器都能理解
- 跨平台:不依赖特定操作系统或编程语言
- 自描述性:标签名称具有语义含义
3.1.2 XML基本语法
1. 基本语法规则
xml
<!-- XML的基本语法就是<元素标签></元素标签>配对出现 -->
<PlayerInfo>
<name>xxx</name>
<age>18</age>
<sex>true</sex>
<ItemList>
<Item>
<id>1</id>
<num>10</num>
</Item>
<Item>
<id>2</id>
<num>10</num>
</Item>
</ItemList>
</PlayerInfo>
2. 固定内容(XML声明)
xml
<!-- 固定内容代表xml的版本使用的编码 -->
<?xml version="1.0" encoding="UTF-8"?>
语法要点:
- 版本声明 :
version="1.0"
指定XML版本 - 编码声明 :
encoding="UTF-8"
指定字符编码 - 根元素:每个XML文档必须有且仅有一个根元素
- 标签配对:开始标签和结束标签必须配对
- 大小写敏感:标签名称区分大小写
3.1.3 XML在Unity中的应用
1. 数据存储优势
- 结构化存储:复杂数据结构的层次化表示
- 可读性强:便于调试和手动编辑
- 跨平台兼容:不同平台间数据交换
- 版本控制友好:文本格式便于版本管理
2. 常见应用场景
- 游戏配置数据
- 关卡设计数据
- 角色属性数据
- 物品系统数据
- 对话系统数据
3.1.4 XML vs 其他数据格式对比
特性 | XML | JSON | Binary | PlayerPrefs |
---|---|---|---|---|
可读性 | 高 | 高 | 低 | 低 |
文件大小 | 大 | 中等 | 小 | 小 |
解析速度 | 慢 | 快 | 最快 | 快 |
跨平台 | 是 | 是 | 否 | 是 |
手动编辑 | 容易 | 容易 | 困难 | 困难 |
版本兼容 | 好 | 好 | 差 | 好 |
3.1.5 XML练习
练习目标:
将C#数据类转换为XML格式,理解XML序列化的基本规则。
1. C#数据类定义
csharp
public class Item
{
public int id;
public int num;
}
public class PlayerInfo
{
public string name; // 玩家姓名
public int atk; // 攻击力
public int def; // 防御力
public float moveSpeed; // 移动速度
public float roundSpeed; // 旋转速度
public Item weapon; // 装备的武器
public List<int> listInt; // 整数列表
public List<Item> itemList; // 物品列表
public Dictionary<int, Item> itemDic; // 物品字典
}
2. XML序列化规则
基本规则:
- 元素节点名使用数据变量名存储
- 如果没有变量名,就用变量类型作为节点名
- 基本类型直接存储值
- 自定义对象使用嵌套元素
- 集合类型使用循环存储
3. 正确的XML结构
xml
<?xml version="1.0" encoding="utf-8"?>
<PlayerInfo>
<!--自己定义一个xml文件规则,元素节点名用数据变量名存储-->
<name>xxx</name>
<atk>100</atk>
<def>100</def>
<moveSpeed>100</moveSpeed>
<roundSpeed>100</roundSpeed>
<weapon>
<id>1</id>
<num>1</num>
</weapon>
<!--如果没有变量名,就用变量类型作为节点名-->
<listInt>
<int>1</int>
<int>2</int>
<int>3</int>
</listInt>
<itemList>
<item id="1" num="1"></item>
<item id="2" num="2"></item>
<item id="3" num="3"></item>
</itemList>
<itemDic>
<int>1</int>
<item id="2" num="2"></item>
<int>2</int>
<item>
<id>3</id>
<num>3</num>
</item>
</itemDic>
</PlayerInfo>
下面提供一个检查xml文本是否有错误的网站