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; } }
额外注意事项
- 确保XML文件的后缀是
.xml,并且放在Resources文件夹下(比如Assets/Resources/XML/Russian/),Unity会自动识别并打包该文件。 - 如果需要修改XML内容(Resources里的文件打包后是只读的),可以先将Resources中的XML复制到
persistentDataPath,之后再通过文件IO读写复制后的文件。
内容的提问来源于stack exchange,提问作者Juzo
相关产品推荐
相关产品推荐

