0

0

Unity游戏怎么用XML来做配置 C#读取游戏设置

月夜之吻

月夜之吻

发布时间:2026-01-12 09:27:14

|

553人浏览过

|

来源于php中文网

原创

Unity中读取XML配置需将文件置于Resources或StreamingAssets目录,用XDocument.Parse解析TextAsset或异步加载StreamingAssets路径文件,并通过扩展方法安全提取字段值。

unity游戏怎么用xml来做配置 c#读取游戏设置

Unity里用XML存配置,C#怎么读取才不崩

Unity本身不内置XML解析器,但.NET Framework和.NET Runtime自带 System.Xml 和更现代的 System.Xml.Linq,只要项目目标框架支持(Unity 2019.4+ 默认用 .NET Standard 2.1 或 .NET 6+),就能直接用。关键不是“能不能”,而是“放哪、怎么读、怎么防错”。

XML文件必须放ResourcesStreamingAssets目录

Unity编辑器里拖进项目的XML文件,默认不会被打包进构建后资源。想运行时读取,得明确告诉Unity“这是数据,别删”。两种主流方式:

  • Resources目录:把XML放进 Assets/Resources/config.xml,用 Resources.Load("config") 加载——但注意返回的是 TextAsset,需用 .text 取字符串再解析
  • StreamingAssets目录:放 Assets/StreamingAssets/config.xml,构建后原样复制到输出目录(如 Application.streamingAssetsPath),适合需要外部修改的配置(比如玩家自定义键位)
  • 别放 Assets 根目录或普通文件夹下——构建时会被忽略,File.Exists 在真机上一定返回 false

XDocumentXmlDocument更稳

XmlDocument 是老式DOM API,容易在Unity协程或多线程中出问题;XDocument(来自 System.Xml.Linq)更轻量、函数式风格强、异常更明确,推荐作为首选。示例读取逻辑:

using System.Xml.Linq;
using UnityEngine;

public static class ConfigLoader
{
    public static bool TryLoadConfig(out XElement root)
    {
        root = null;
        try
        {
            // 从 Resources 加载
            TextAsset asset = Resources.Load("config");
            if (asset == null) return false;

            XDocument doc = XDocument.Parse(asset.text);
            root = doc.Root;
            return root != null;
        }
        catch (System.Xml.XmlException ex)
        {
            Debug.LogError($"XML解析失败: {ex.Message}");
            return false;
        }
    }
}

常见坑:

聪豹Wiseal
聪豹Wiseal

聪豹Wiseal是一个专业的历史时间线收集整理工具

下载
  • XML声明行 如果编码声明和实际不符(比如文件是UTF-8 BOM但写成 encoding="utf-8"),XDocument.Parse 会抛 XmlException
  • Unity Android/iOS 构建后,StreamingAssets 路径要用 WWWUnityWebRequest 异步加载(因是只读压缩包),不能直接 File.ReadAllText
  • 节点名大小写敏感,root.Element("Setting") 找不到

配置类建议用XElement延时解析,别急着转实体

别一上来就写 new GameConfig { Volume = (float)root.Element("volume") }。XML结构常变,硬绑定容易崩。更安全的做法是封装一层“可空提取”:

public static class XmlExtensions
{
    public static float GetFloat(this XElement el, string name, float defaultValue = 0f)
    {
        var val = el?.Element(name)?.Value;
        return float.TryParse(val, out float f) ? f : defaultValue;
    }

    public static bool GetBool(this XElement el, string name, bool defaultValue = false)
    {
        var val = el?.Element(name)?.Value;
        return bool.TryParse(val, out bool b) ? b : defaultValue;
    }
}

这样调用:configRoot.GetFloat("masterVolume", 0.8f)。比反复写 try/catchnull 判断清爽,也避免因某字段缺失导致整个配置加载失败。

真正复杂配置(比如技能表、物品列表)建议用 ScriptableObject 替代XML——Unity编辑器里可直接可视化编辑、版本控制友好、无解析开销。XML只适合纯数值开关、语言词条、少量外部可调参数这类场景。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

556

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

98

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

231

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

435

2024.03.01

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1872

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2085

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

974

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

253

2023.08.03

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

97

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 45万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 6.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号