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

Android设备SD卡视频无法链接Unity VideoPlayer的路径问题咨询

解决Unity VideoPlayer无法加载Android SD卡视频的问题

你的问题核心是Android外部存储路径的硬编码错误,Android系统的SD卡路径和PC的路径结构完全不同,而且不同设备的SD卡挂载路径可能有差异,直接写/root/SD card/...肯定无法被系统识别。下面一步步帮你解决:

1. 为什么原来的路径无效?

  • Android的/root目录是系统根目录,普通应用没有访问权限,你的应用根本无法读取这个路径下的文件。
  • 大多数设备的“SD卡”其实是内置外部存储,正确的根路径一般是/storage/emulated/0(或者简化为/sdcard),但硬编码这个路径依然会有兼容性问题(比如部分外置SD卡的路径是/storage/XXXX-XXXX)。

2. 正确获取Android外部存储路径

Unity提供了专门的API来获取外部存储路径,避免硬编码的兼容性问题:

  • Application.ExternalStorageDirectory.AbsolutePath:获取内置外部存储的根目录(对应你设备里的“SD卡”目录)。
  • 如果需要访问外置SD卡,可以通过AndroidJavaClass调用Android原生API获取,但大多数场景下用内置外部存储就足够了。

3. 修改你的代码

把硬编码的路径改成用API拼接的方式,同时注意用Path.Combine来处理路径分隔符(避免Android和PC的路径符号差异):

using System.IO; // 需要引入IO命名空间
using UnityEngine;
using UnityEngine.Video;

public class VideoLoader : MonoBehaviour
{
    private string[] videoFilePath = new string[4]; 
    private string externalStorageRoot;

    private void OnEnable() 
    {
        // 获取Android外部存储根目录
        externalStorageRoot = Application.ExternalStorageDirectory.AbsolutePath;
        
        // 拼接视频文件路径
        videoFilePath[1] = Path.Combine(externalStorageRoot, "360 Videos/Searching For Caribou Behind the Scenes FINAL_360.mp4");
        videoFilePath[2] = Path.Combine(externalStorageRoot, "360 Videos/Surround Yourself_360.mp4");
        videoFilePath[3] = Path.Combine(externalStorageRoot, "360 Videos/Valley of Bones FINAL_360.mp4");
    } 

    private void SetVideoPlayerUrl()
    {
        var videoPlayer = GetComponent<VideoPlayer>();
        var selectHandler = GameObject.Find("video select").GetComponent<VRInteractiveHandler>();
        int selectedIndex = selectHandler.listIndexNumber;
        
        // 检查路径是否有效(可选,用于调试)
        if (File.Exists(videoFilePath[selectedIndex]))
        {
            videoPlayer.url = videoFilePath[selectedIndex];
        }
        else
        {
            Debug.LogError($"视频文件不存在:{videoFilePath[selectedIndex]}");
        }
    }
}

4. 配置Android权限

Android系统会限制应用访问外部存储,你需要添加对应的权限:

  1. 打开Unity的Player Settings(Edit > Project Settings > Player)。
  2. 切换到Android平台,找到Publishing Settings > Permissions。
  3. 勾选READ_EXTERNAL_STORAGE(如果需要写入文件再勾选WRITE_EXTERNAL_STORAGE)。
  4. 对于Android 13及以上版本,需要勾选READ_MEDIA_VIDEO权限。

另外,在Android 6.0及以上版本,需要动态申请权限,可以在Start方法中添加:

private void Start()
{
    #if UNITY_ANDROID && !UNITY_EDITOR
        if (!Permission.HasUserPermission(Permission.ExternalStorageRead))
        {
            Permission.RequestUserPermission(Permission.ExternalStorageRead);
        }
    #endif
}

5. 调试技巧

如果还是无法加载,可以通过以下方式排查:

  • 在Unity的Console中打印最终生成的路径,确认路径是否正确:Debug.Log(videoFilePath[selectedIndex]);。
  • 用Android的文件管理器确认视频文件确实存在于该路径下,注意文件名的大小写(Android路径是区分大小写的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:36:18