推荐使用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)。前者兼容性好,后者语法简洁、易读易写,适合大多数项目。
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比XmlDocument更轻量、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;
如果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里测试正常,但打包后可能出错,主要因路径或编码问题:
Resources.Load异步加载XML?实际支持,但必须确保构建时勾选了Include Text Assets(默认已包含)Application.streamingAssetsPath也可放XML,但需用WWW或UnityWebRequest异步读取,不能直接File.Read
# 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
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。