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

如何通过Unity让Oculus Quest 2访问外接驱动器?

问题:Oculus Quest 2打包后无法访问Mac外接驱动器文件

在Mac的Unity编辑器中运行代码可正常访问本地外接驱动器,但打包到Oculus Quest 2设备后,出现文件未找到错误。以下是相关代码和Manifest文件,寻求解决思路或替代方案:

代码片段

if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
{
    Debug.Log("Permission set?");
    Permission.RequestUserPermission(Permission.ExternalStorageRead);
}

string[] args = new string[] { "v", "*path file*" };
if (args.Length > 1 && System.IO.Directory.Exists(args[1]))
{
    directory = args[1];
    have_directory = true;
    Debug.Log("Valid directory specified!");
    if (args.Length > 2)
    {
        current_frame = int.Parse(args[2]);
    }
}
else
{
    Debug.Log("No directory found :(");
    return;
}

Manifest文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.UnityTechnologies.com.unity.template.urpblank"
android:versionCode="1"
android:versionName="0.1.0"
android:installLocation="auto">
<uses-feature android:name="android.hardware.vr.headtracking" android:version="1" android:required="true" />
<application>
<meta-data android:name="com.oculus.intent.category.VR" android:value="vr_only" />
<meta-data android:name="com.oculus.supportedDevices" android:value="quest|quest2|cambria" />
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="false" />
<activity android:screenOrientation="landscape"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
android:configChanges="density|keyboard|keyboardHidden|navigation|orientation|screenLayout|screenSize|uiMode"
android:launchMode="singleTask"
android:name="com.unity3d.player.UnityPlayerActivity"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.INFO" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="com.oculus.permission.READ_VR_DEVICE_PARAMS" />
<uses-permission android:name="com.oculus.permission.SET_VR_DEVICE_PARAMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

解决思路与替代方案

核心问题分析

Oculus Quest 2是独立的Android设备,无法直接访问Mac上的外接驱动器路径。编辑器中能正常运行是因为代码在Mac本地执行,直接读取本地文件系统;打包到设备后,代码运行在Android系统环境下,完全无法识别Mac的文件路径,这是跨设备文件访问的本质限制,和权限无关。

具体解决方案

  • 方案1:将文件转移到Quest设备本地
    把外接驱动器中的目标文件复制到Quest 2的内部存储或外接SD卡中,代码中使用Android系统可识别的路径,例如:

    • 私有存储路径:Application.persistentDataPath
    • 公共存储路径:Android.OS.Environment.ExternalStorageDirectory.AbsolutePath
      确保文件放置路径正确后,修改代码中的路径参数为设备本地路径。
  • 方案2:通过网络共享访问文件
    在Mac上将外接驱动器设置为SMB网络共享,然后在Quest的Unity代码中使用UnityWebRequest或HttpClient通过网络请求读取共享文件。注意需要确保Mac和Quest处于同一局域网内,并且共享权限设置正确。

  • 方案3:开发阶段临时方案(Oculus Link串流)
    如果仅在开发调试阶段需要访问Mac文件,可使用Oculus Link将Quest与Mac连接,直接在Unity编辑器中串流运行项目,此时代码仍在Mac本地执行,可正常访问外接驱动器,但该方案仅适用于开发场景,无法用于发布后的独立设备运行。

代码优化建议

  • 移除硬编码的Mac路径,替换为设备可访问的动态路径。
  • 当前权限申请逻辑未等待用户授权完成就执行文件检查,可能导致权限未获取就进入错误分支。建议添加授权状态回调或在Update中轮询授权状态,确认权限获取后再执行文件读取逻辑:
    IEnumerator CheckPermissionThenAccess()
    {
        if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
        {
            Permission.RequestUserPermission(Permission.ExternalStorageRead);
            yield return new WaitForSeconds(2); // 等待用户操作
            while (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
            {
                yield return null;
            }
        }
        // 这里执行文件访问逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:57:19