Unity_数据持久化_XML基础

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文本是否有错误的网站

https://www.runoob.com/xml/xml-validator.html