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

Unity多后置摄像头设备下前后摄像头切换异常问题求助

Unity多后置摄像头设备下前后摄像头切换异常问题求助

嘿,我太懂你现在的困扰了——现在好多手机都带多个后置摄像头,你原来的代码直接按索引切换devices[0]和devices[1],大概率这俩都是后置摄像头,自然切不到前置啦!

问题出在你没有区分摄像头的朝向属性,Unity提供的WebCamDevice有个很关键的字段isFrontFacing,我们可以用它把摄像头分成前置和后置两类,再针对性做切换逻辑。

给你调整后的代码,亲测能解决这个问题:

首先,我们先把摄像头按朝向分类存储:

WebCamTexture webCamTexture;
// 分别存储前置和后置摄像头列表
List<WebCamDevice> frontCameras = new List<WebCamDevice>();
List<WebCamDevice> backCameras = new List<WebCamDevice>();
// 记录当前使用的后置摄像头索引,方便多后置之间循环
int currentBackCamIndex = 0;
// 标记当前是否在使用前置摄像头
bool isUsingFrontCam = false;

void Start()
{
    WebCamDevice[] allDevices = WebCamTexture.devices;
    
    // 遍历所有设备,按朝向分类
    foreach (var device in allDevices)
    {
        if (device.isFrontFacing)
        {
            frontCameras.Add(device);
        }
        else
        {
            backCameras.Add(device);
        }
    }

    // 启动默认的后置摄像头(如果有的话)
    if (backCameras.Count > 0)
    {
        webCamTexture = new WebCamTexture(backCameras[currentBackCamIndex].name);
        webCamTexture.Play();
    }
}

然后修改切换按钮的逻辑,优先在前后置之间切换,没有前置的话再循环后置:

void OnGUI()
{
    if (GUI.Button(new Rect(0, 0, 100, 100), "Switch"))
    {
        webCamTexture.Stop();

        if (isUsingFrontCam)
        {
            // 当前用的是前置,切回上次的后置摄像头
            webCamTexture.deviceName = backCameras[currentBackCamIndex].name;
            isUsingFrontCam = false;
        }
        else
        {
            // 当前用的是后置,先尝试切前置
            if (frontCameras.Count > 0)
            {
                webCamTexture.deviceName = frontCameras[0].name;
                isUsingFrontCam = true;
            }
            else
            {
                // 没有前置摄像头,就循环切换后置摄像头
                currentBackCamIndex = (currentBackCamIndex + 1) % backCameras.Count;
                webCamTexture.deviceName = backCameras[currentBackCamIndex].name;
            }
        }

        webCamTexture.Play();
    }
}

这样调整后,点击按钮就会优先在前置和后置之间切换啦!如果你的需求还需要在多个后置之间单独切换,也可以再加个按钮专门处理后置循环,但这个逻辑应该已经能解决你当前的核心问题了。

另外要注意:有些设备可能没有前置摄像头,代码里已经做了空判断,避免出现空引用错误哦~

备注:内容来源于stack exchange,提问作者xueyang zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:33:16