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
相关产品推荐
相关产品推荐

