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

Unity安卓打包Oculus Quest2项目:加载XML并获取文件路径

解决Oculus Quest2打包后Resources中XML文件的路径读取问题

问题核心

Unity打包后,Resources文件夹内的资源会被整合进游戏包体,不存在独立的物理文件路径,因此无法通过常规文件路径API访问。你之前的Resources.Load("IceAttack")未指定资源类型,导致Unity错误识别了XML文件(比如当成Texture2D),所以ToString()返回的是对象类型名而非路径。

解决方案

根据是否能修改GestureIO.ReadGestureFromFile函数,提供两种可行方案:

方案一:修改函数直接读取文本内容(推荐)

直接让GestureIO支持读取文本内容,避免文件IO操作,效率更高:

  1. 正确加载XML为TextAsset类型:
TextAsset xmlAsset = Resources.Load<TextAsset>("IceAttack");
if (xmlAsset != null)
{
    // 调用新增的重载方法
    trainingSets.Add(GestureIO.ReadGestureFromText(xmlAsset.text));
}
  1. 在GestureIO类中添加重载方法:
public static Gesture ReadGestureFromText(string xmlContent)
{
    // 将原ReadGestureFromFile中读取文件的逻辑替换为直接使用xmlContent
    // 例如原代码中File.ReadAllText(path)的部分,直接传入xmlContent即可
    // 后续XML解析逻辑保持不变
}

方案二:写入临时文件后用路径访问(无法修改GestureIO时使用)

将Resources中的XML内容写入可读写的持久化路径,再用临时路径传入函数:

using System.IO;
using UnityEngine;

// 加载XML资源
TextAsset xmlAsset = Resources.Load<TextAsset>("IceAttack");
if (xmlAsset != null)
{
    // 生成临时文件路径
    string tempFilePath = Path.Combine(Application.persistentDataPath, "temp_IceAttack.xml");
    // 将XML内容写入临时文件
    File.WriteAllText(tempFilePath, xmlAsset.text);
    // 传入临时路径到函数
    trainingSets.Add(GestureIO.ReadGestureFromFile(tempFilePath));
    // 可选:用完后删除临时文件
    // File.Delete(tempFilePath);
}

额外注意事项

  • 确保XML文件的Unity导入设置正确:选中XML文件,在Inspector面板将其设置为Text Asset类型,避免被错误识别为其他资源(如Texture)。
  • Oculus Quest2的Application.persistentDataPath是应用专属的可读写路径,写入临时文件不会有权限问题。
  • 若需加载多个XML文件,可使用Resources.LoadAll<TextAsset>("")批量加载,再通过文件名筛选.xml后缀的资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:09:18