Unity数据持久化

三、XML数据持久化

3.1 XML基础概念

3.1.1 什么是XML

XML(eXtensible Markup Language)**是一种可扩展的标记语言,用于存储和传输数据。它具有以下特点:

  • 结构化:数据以层次结构组织
  • 可读性:人类和机器都能理解
  • 跨平台:不依赖特定操作系统或编程语言
  • 自描述性:标签名称具有语义含义
3.1.2 XML基本语法

1. 基本语法规则

<!-- 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 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 其他数据格式对比

特性XMLJSONBinaryPlayerPrefs
可读性
文件大小中等
解析速度最快
跨平台
手动编辑容易容易困难困难
版本兼容
3.1.5 XML练习

练习目标:
将C#数据类转换为XML格式,理解XML序列化的基本规则。

1. C#数据类定义

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 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91797.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91797.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91797.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型的解码策略:贪婪解码与波束搜索

在自然语言生成任务&#xff08;如机器翻译、文本摘要、图像描述等&#xff09;中&#xff0c;语言模型通常会输出一个词的概率分布&#xff0c;但模型本身并不会自动告诉你应该选哪些词作为最终的输出句子。因此&#xff0c;我们需要设计一个“解码策略”来从这些概率中生成可…

智慧园区:中小企业的 “减压阀” 与数字化招商革命

在当前的经济环境下&#xff0c;中小企业的生存发展面临着诸多挑战&#xff0c;其中选址成本俨然成为了创业路上的 “第一道坎”。传统招商模式中&#xff0c;信息不对称的问题尤为突出&#xff0c;初创企业常常因此陷入选址失误的困境。有的企业选在交通不便的地方&#xff0c…

从零开始配置pytorch环境

总结了一下几篇热门文章和自己的经验&#xff0c;方便以后换设备配置环境 一、安装Anaconda 这一步是为了不污染全局环境&#xff0c;很有必要。 直接清华源镜像下载&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 根据自…

离线录像文件视频AI分析解决方案

前言 在安防领域&#xff0c;视频的价值不言而喻&#xff0c;尤其是录像文件的价值显得更是尤为重要。在一个安防项目上视频录像一般存储1个月、3个月甚至更长时间&#xff0c;这就形成了海量的离线录像文件数据。传统安防项目对录像文件的处理还有一定的局限性&#xff1a; 事…

人工智能与金融:金融服务的重塑

1. AI 驱动金融变革&#xff1a;从 “标准化” 到 “智能化”1.1 传统金融的痛点与 AI 的破局传统金融行业长期面临三大瓶颈&#xff1a;服务效率低下&#xff1a;银行柜台办理一笔贷款需 3-5 个工作日&#xff0c;人工审核流程繁琐&#xff0c;客户等待时间长&#xff1b;风险…

Qwen大模型关键参数解析:缓存与滑动窗口

QwenLLM "use_cache": true Qwen "use_sliding_window": false 在大语言模型(如Qwen系列)的生成配置中,"use_cache": true 和 "use_sliding_window": false 是两个与模型推理效率和长文本处理相关的重要参数,具体含义如下: 1. …

Flask 框架全面详解

Flask 是一个轻量级的 Python Web 框架&#xff0c;以其简洁、灵活和易扩展的特性广受欢迎。接下来我将从多个维度详细介绍 Flask 框架。 1. Flask 核心特性 微框架设计 轻量级&#xff1a;核心功能精简&#xff0c;只包含基本组件可扩展&#xff1a;通过扩展添加所需功能无…

概率 多维随机变量与分布

一、二维1、二维随机变量及其分布假设E是随机试验&#xff0c;Ω是样本空间&#xff0c;X、Y是Ω的两个变量&#xff1b;(X,Y)就叫做二维随机变量或二维随机向量。X、Y来自同一个样本空间。联合分布函数 F(x,y)P(X≤x,Y≤y)&#xff0c;即F(x,y)表示求(x,y)左下方的面积。 F(x,…

Spring AI MCP:解锁大模型应用开发新姿势

一、AI 浪潮下的新利器 ——Spring AI MCP 登场在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最耀眼的技术明星&#xff0c;正以前所未有的速度渗透到各个领域&#xff0c;深刻改变着我们的生活和工作方式。从智能语音助手到图像识别技术&#xff0c;…

ThinkPHP5x,struts2等框架靶场复现

ThinkphpThinkphp5x远程命令执行及getshell首先我们先找一个环境&#xff0c;或者自己搭建一个环境fofa&#xff1a;body"ThinkPHP V5"搭建&#xff1a;vulhub/thinkphp/5-rcedocker-compose up -d然后去访问我们的环境远程命令执行/?sindex/think\app/invokefuncti…

Hyperliquid:揭秘高性能区块链共识引擎HyperBFT

大家好&#xff0c;今天我们一起探讨Hyperliquid这个高性能区块链项目以及它背后的共识引擎。Hyperliquid能在拥挤的去中心化交易赛道&#xff08;DEX&#xff09;中脱颖而出&#xff0c;很大程度上要归功于其高效的共识机制——HyperBFT。 为了彻底搞懂HyperBFT&#xff0c;我…

大模型开发框架LangChain之构建知识库

1.前言 为了避免 llm正确的废话和幻觉&#xff0c;知识库可以说是现在开发 agent的必备了。同时&#xff0c;作为 rag中的 r&#xff0c;知识库召回的成功率会极大的影响 llm的最终回复效果。一般&#xff0c;会把知识库召回的内容作为背景知识给到 llm&#xff0c;并在 prompt…

NPM打包时,报reason: getaddrinfo ENOTFOUND registry.nlark.com

先说解决方法&#xff1a;将 package-lock.json 文件中的 registry.nlark.com 改为 registry.npmmirror.com现象&#xff1a;npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOUND npm ERR! network request to https://registry.nlark.com/url-too…

python内置库os与sys的区别是什么?分别能实现什么功能?

Python 的 os 和 sys 是两个功能截然不同但都非常重要的内置库&#xff0c;它们分别服务于不同的交互场景&#xff1a;前者专注于与操作系统交互&#xff0c;后者专注于与 Python 解释器本身交互。以下是详细解析&#xff1a; 一、os 库&#xff1a;操作系统交互接口 os 库&…

【云计算】云主机的亲和性策略(一):快乐旅行团

《云主机的亲和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 云主机的亲和性策略&#xff08;一&#xff09;&#xff1a;快乐旅行团2️⃣ 云主机的亲和性策略&#xff08;二&#xff09;&#xff1a;集群节点组3️⃣ 云主机的亲和性策略&#xff08;三&#xf…

USRP捕获手机/路由器数据传输信号波形(下)

目录&#xff1a; USRP捕获手机/路由器数据传输信号波形&#xff08;上&#xff09; USRP捕获手机/路由器数据传输信号波形&#xff08;中&#xff09; USRP捕获手机/路由器数据传输信号波形&#xff08;下&#xff09; 四、路由器MIMO-OFDM系统 本文深入分析采集手机与路由…

位运算在权限授权中的应用及Vue3实践

在现代前端应用中&#xff0c;权限管理是一个至关重要的功能模块。随着应用复杂度的提示功能&#xff0c;权限细粒度越来越精细&#xff0c;如何高效地管理和判断权限成为前端开发的一大挑战。位运算作为一种高效的运算方式&#xff0c;在权限管理领域有着独特的优势。本文将详…

面试实战,问题二十二,Java JDK 17 有哪些新特性,怎么回答

Java JDK 17 新特性面试回答指南 作为一名Java开发者&#xff0c;了解JDK 17的新特性是面试中的关键点。JDK 17&#xff08;Java SE 17&#xff09;于2021年9月发布&#xff0c;是一个长期支持&#xff08;LTS&#xff09;版本&#xff0c;引入了多项改进以提升开发效率、安全性…

【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单

基本概念SQL注入是OWASP Top 10安全风险之一&#xff0c;它利用了应用程序对用户输入数据的不当处理。当应用程序直接将用户输入拼接到SQL查询中而没有进行适当的过滤或转义时&#xff0c;就可能发生SQL注入攻击。攻击原理假设有一个登录表单的SQL查询&#xff1a;SELECT * FRO…

pyqt5显示任务栏菜单并隐藏主窗口,环境pyqt5+vscode

环境 pyqt5vscode 环境搭建见 https://blog.csdn.net/huiaifen/article/details/125175261 新建一个QMainWindow 1 在VSCode的资源管理器中&#xff0c;右键选择 PYQT:New Form&#xff0c;打开Qt Designer2 在打开的窗口中选 “Main Window”&#xff0c;然后选“创建”3 直接…