推荐用XDocument读取本地XML配置文件,优先放Resources文件夹并用Resources.Load加载后Parse;若放StreamingAssets则需UnityWebRequest异步加载,注意UTF-8无BOM编码及平台路径差异。

Unity中读取XML数据,推荐用C#原生的 XmlDocument 或更现代的 XDocument(LINQ to XML),两者都稳定、易用、无需额外插件。重点不是“能不能”,而是选对方式、避开路径和编码坑。
用 XDocument 读取本地 XML 配置文件(推荐)
XDocument 语法简洁,支持 LINQ 查询,适合配置类XML(如角色属性、关卡参数)。注意:Unity里资源要放在 Resources 文件夹或 StreamingAssets 中。
- 若放 Resources 文件夹(如
Resources/config.xml),用Resources.Load加载为("config") TextAsset,再用XDocument.Parse(textAsset.text) - 若放 StreamingAssets(适合玩家可修改的配置),需拼接完整路径:
Path.Combine(Application.streamingAssetsPath, "config.xml"),再用XDocument.Load(path)—— Android/iOS 上必须用 UnityWebRequest 异步加载,不能直接 File.ReadAllText - 示例读取节点:
var root = doc.Root; var hp = root.Element("Player").Element("HP").Value;
用 XmlDocument 处理结构复杂或需修改保存的 XML
XmlDocument 更适合需要动态增删节点、或兼容老项目的情况。它操作的是内存中的树形结构,支持 Save() 直接写回磁盘(仅 Editor 和 Standalone 支持;移动端需另存到 Application.persistentDataPath)。
- 加载方式类似:
var doc = new XmlDocument(); doc.LoadXml(textAsset.text);或doc.Load(filePath) - 查节点用
GetElementsByTagName或SelectSingleNode("Player/HP")(支持 XPath) - 修改后保存:
doc.Save(Path.Combine(Application.persistentDataPath, "user_config.xml"))
注意编码与路径几个关键细节
XML 文件本身建议用 UTF-8 无 BOM 格式保存(VS Code 默认就是),否则中文可能乱码;Unity Editor 下路径不区分大小写,但 Android/iOS 严格区分;StreamingAssets 在 Android 上是只读压缩包,必须用 UnityWebRequest 解包读取。
- 安全读取 StreamingAssets 的写法:
UnityWebRequest req = UnityWebRequest.Get(filePath); yield return req.SendWebRequest(); if (!req.isNetworkError) { XDocument.Parse(req.downloadHandler.text); } - 避免硬编码路径,统一用
Path.Combine拼接 - 加 try-catch,XML格式错误时别让游戏崩溃
简单配置类可考虑替代方案
如果只是读取静态配置(比如技能表、物品ID),XML 不是唯一选择。JSON 更轻量、Unity 原生支持 JsonUtility;ScriptableObject 更适合美术/策划直接在 Inspector 编辑。XML 的优势在于层级清晰、人眼可读性强、天然支持注释——适合需要跨平台共享、带文档说明的配置。
基本上就这些。选 XDocument + Resources 是新手最快上手的方式,注意路径和编码,基本不会踩坑。










