You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Android平台XML文件读取失败问题求助

问题分析与解决

你的核心问题是混淆了Unity中Resources文件夹的访问规则,以及不同路径的用途:

错误点拆解

  • Resources文件夹不能用文件IO直接读取:编辑器里Application.dataPath指向项目的Assets目录,所以能直接读到Assets/Resources下的文件,但打包后(比如Android),Resources里的文件会被压缩进APK的AssetBundle中,无法通过普通的文件路径(比如xmlDoc.Load)访问。
  • persistentDataPath里没有Resources目录:这个路径是应用的可读写沙盒目录,默认不会包含打包时的Resources内容,所以你在这里找文件肯定找不到。

正确的读取方式

要读取Resources中的XML文件,必须用Unity提供的Resources.Load<TextAsset>加载文件内容,再用XmlDocument解析文本,而不是直接读取文件路径。

修改后的代码如下:

private void LoadTasks()
{
    // 加载Resources中的XML文件,路径是相对于Resources文件夹的,不要加Resources前缀
    TextAsset xmlText = Resources.Load<TextAsset>($"XML/Russian/{BurronController.mode}");
    if (xmlText == null)
    {
        Debug.LogError($"找不到XML文件: XML/Russian/{BurronController.mode}.xml");
        return;
    }

    XmlDocument xmlDoc = new XmlDocument();
    // 加载文本内容而非文件路径
    xmlDoc.LoadXml(xmlText.text);

    XmlNodeList nodes = xmlDoc.DocumentElement.ChildNodes;
    XmlNode trueNode = nodes[0];
    XmlNode doNode = nodes[1];

    trueTasks = new string[trueNode.ChildNodes.Count];
    doTasks = new string[doNode.ChildNodes.Count];

    for (int i = 0; i < trueTasks.Length; i++)
    {
        trueTasks[i] = trueNode.ChildNodes[i].InnerText;
    }

    for (int i = 0; i < doTasks.Length; i++)
    {
        doTasks[i] = doNode.ChildNodes[i].InnerText;
    }
}

额外注意事项

  1. 确保XML文件的后缀是.xml,并且放在Resources文件夹下(比如Assets/Resources/XML/Russian/),Unity会自动识别并打包该文件。
  2. 如果需要修改XML内容(Resources里的文件打包后是只读的),可以先将Resources中的XML复制到persistentDataPath,之后再通过文件IO读写复制后的文件。

内容的提问来源于stack exchange,提问作者Juzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:45:42