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

如何判断Unity应用是否获得设备摄像头访问权限及相关异常处理方案

问题原因确认

你关于try-catch不生效的推测是正确的:WebCamTexture.Play()输出的ERROR - Could not find specified video device属于Unity底层Native层的错误日志,并非C#托管层抛出的异常,该错误已经在引擎底层完成捕获处理,因此上层C#代码的try-catch块无法捕获到该异常。

摄像头权限检测解决方案

你可以通过以下两种成熟方案检测用户是否拒绝了摄像头权限:

  • 方案1:主动提前申请摄像头权限
    无需等待调用WebCamTexture接口触发权限申请,可在初始化摄像头逻辑前主动调用Unity官方的权限申请接口,直接根据权限返回结果判断访问状态:
    安卓端示例代码:

    using UnityEngine.Android;
    
    // 调用摄像头逻辑前先检查权限
    if (!Permission.HasUserAuthorizedPermission(Permission.Camera))
    {
        // 发起权限申请,可自定义回调监听用户选择结果
        Permission.RequestUserPermission(Permission.Camera);
    }
    else
    {
        // 已获得权限,直接执行摄像头初始化逻辑
    }
    

    iOS端可使用Unity提供的iOS权限申请API,或在XCode打包配置中补充权限描述后调用对应授权接口,获取授权状态。

  • 方案2:通过WebCamTexture运行状态判定授权结果
    若你已经调用了backCam.Play(),可以在调用后延迟2-3帧检测WebCamTexture的运行参数判断是否授权成功:

    backCam.Play();
    // 等待底层完成摄像头初始化尝试
    yield return new WaitForEndOfFrame();
    yield return new WaitForEndOfFrame();
    yield return new WaitForEndOfFrame();
    
    // 权限被拒时,WebCamTexture宽高会保持初始极小值(通常为16x16),且isPlaying状态为false
    if (backCam.width <= 16 || backCam.height <= 16 || !backCam.isPlaying)
    {
        // 判定为用户拒绝摄像头权限,执行对应错误提示逻辑
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:51:03