Unity怎么读取XML配置文件 C#解析XML数据


推荐使用System.Xml.Linq(LINQ to XML)读取XML配置文件,将config.xml放入Assets/Resources/Configs/并用Resources.Load("Configs/config")获取TextAsset,再通过XDocument.Parse(textAsset.text)解析;也可用XmlSerializer反序列化为强类型对象,需注意UTF-8无BOM编码、平台兼容性及缓存优化。

Unity中读取XML配置文件,推荐用C#原生的System.Xml或更现代的System.Xml.Linq(即LINQ to XML)。前者兼容性好,后者语法简洁、易读易写,适合大多数项目。

把XML文件放进Resources文件夹(最简单方式)

Unity不支持直接用File.ReadAllText读取任意路径的XML(尤其在WebGL或移动端),所以建议把配置文件放在Assets/Resources/下,用Resources.Load加载:

  • config.xml放入Assets/Resources/Configs/(路径可自定义)
  • 确保文件扩展名是.xml,且Unity未将其识别为文本资源以外的类型(可在Inspector里确认Text Asset类型)
  • 代码中用Resources.Load("Configs/config")获取——注意不用写.xml后缀

用XDocument解析XML(推荐LINQ to XML)

XDocumentXmlDocument更轻量、API更直观。加载完TextAsset后,用其text属性创建XDocument:

XDocument doc = XDocument.Parse(textAsset.text);
var root = doc.Root;
// 例如读取 
double volume = (double)root.Attribute("volume");
bool fullscreen = (bool)root.Attribute("fullscreen");
// 读取子节点:
var level = root.Element("Level");
string levelName = level?.Attribute("name")?.Value;
string difficulty = level?.Attribute("difficulty")?.Value;

用XmlSerializer反序列化成对象(适合结构固定场景)

如果XML格式规范、和C#类一一对应,可用XmlSerializer自动映射。先定义带[XmlRoot][XmlElement]等特性的类:

[XmlRoot("GameSettings")]
public class GameConfig
{
    [XmlAttribute] public float volume;
    [XmlAttribute] public bool fullscreen;
    [XmlElement("Level")] public List levels;
}

public class LevelData
{
    [XmlAttribute] public string name;
    [XmlAttribute] public string difficulty;
}

// 使用:
var serializer = new XmlSerializer(typeof(GameConfig));
using var reader = new StringReader(textAsset.text);
GameConfig config = (GameConfig)serializer.Deserialize(reader);

注意:XmlSerializer要求类为public,字段/属性有public get/set,且不能有无参构造函数缺失等问题。

注意事项和常见坑

Unity Editor里测试正常,但打包后可能出错,主要因路径或编码问题:

  • XML文件保存时用UTF-8无BOM格式(VS Code或Notepad++可设置),避免中文乱码
  • WebGL平台不支持Resources.Load异步加载XML?实际支持,但必须确保构建时勾选了Include Text Assets(默认已包含)
  • Android/iOS上Application.streamingAssetsPath也可放XML,但需用WWWUnityWebRequest异步读取,不能直接File.Read
  • 频繁读取?缓存解析结果,不要每帧都Parse


# android  # 编码  # app  # 中文乱码  # ios  # stream  # 配置文件  # vs code  # c#  # 异步加载  # notepad  # 构造函数  # include  # xml  # public  # 对象  # bom  # 异步  # linq  # webgl  # unity  # 加载  # 不支持  # 放在  # 推荐使用  # 将其  # 也可  # 可在  # 自定义  # 最简单 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: 如何使用Golang写入二进制文件_Golang io Write二进制写入示例  Win11快速助手怎么用_Win11远程协助连接教程【工具】  如何在 Go 中调用动态链接库(.so)中的函数  Win11怎么关闭系统推荐内容_Windows11开始菜单布局设置  如何使用Golang安装API文档生成工具_快速生成接口文档  获取 PHP 文件最后修改时间的正确方法  如何在 Pandas 中按元素交集合并两列字符串  Win11输入法切换快捷键怎么改_Windows 11自定义语言切换键位【教程】  Win11怎样激活系统密钥_Win11系统密钥激活步骤【攻略】  为什么本地php环境运行php脚本卡顿_php执行效率优化方法与设置【说明】  PHP的FastAdmin架构适合二次开发吗_特点分析【介绍】  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  Windows10如何更改日期格式_Win10区域设置短日期修改  新手学PHP架构总混淆概念咋办_重点梳理【教程】  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  PHP主流架构怎么集成Redis缓存_配置步骤【方法】  Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】  Go 语言标准库为何不提供泛型 Contains 方法:设计哲学与类型系统约束  Win11怎么设置开机密码_Windows11账户登录选项PIN码  Win10如何更改网络连接_Windows10以太网属性IP配置  Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  Win11怎么开启移动热点_Windows11共享网络给手机设置教程  Windows10系统怎么查看硬盘健康_Win10 SMART信息检测工具  Windows服务无法启动错误1067是什么_进程意外终止的解决方法  C#如何序列化对象为XML XmlSerializer用法  Windows怎样关闭锁屏广告_Windows关闭锁屏广告方法【教程】  php嵌入式需要什么环境_搭建php+linux嵌入式开发环境【详解】  如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法  如何在Golang中解压文件_Golang compress/gzip解压操作方法  LINUX如何开放防火墙端口_Linux firewalld与iptables开放端口命令【安全配置】  Win11任务栏颜色怎么改_Win11自定义任务栏配色设置【美化】  Mac上的iMovie如何剪辑视频?(新手入门教程)  Windows音频驱动无声音原因解析_声卡驱动错误修复步骤  跨文件调用类方法怎么用_php作用域操作符与自动加载配合【介绍】  如何在Golang中引入测试模块_Golang测试包导入与使用实践  Win11怎么设置应用分屏_Windows11贴靠布局Snap Layouts  Win11用户账户控制怎么关_Win11关闭UAC弹窗提示【设置】  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  VSC里PHP变量未定义报错怎么解决_错误抑制技巧【解答】  Mac如何备份到iCloud_Mac桌面与文稿文件夹云同步【设置】  php订单日志权限怎么设_php订单日志文件权限设置技巧【技巧】  c# 服务器GC和工作站GC的区别和设置  php怎么连接数据库_MySQL数据库连接的基础代码编写【说明】  如何在Golang中理解指针比较_Golang地址比较与相等判断  php订单日志怎么按状态筛选_php筛选不同状态订单日志教程【教程】  Win11怎么硬盘分区 Win11新建磁盘分区详细教程【步骤】  php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】  php下载安装包怎么选_threadsafe与nts版本差异【解答】  Win11怎么设置屏保_Windows 11屏幕保护程序开启与设置【详解】 

 2025-12-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.