【问题标题】:Unity Android front facing Camera WTF bugUnity Android 前置摄像头 WTF 错误
【发布时间】:2016-03-07 13:53:22
【问题描述】:

我正在使用 Unity 开发适用于 Android 的应用。 尝试使用前置摄像头,从 WebCamTexture 获取数据。后向工作正常,但是当我尝试翻转相机时,这个可怕的事情就出来了:

**bitstream == (int)0xAFAFAFAF

作为统一控制台中的错误。然后,即使使用后置摄像头,WebCamTexture 也完全停止工作。 有什么想法吗?

附:使用 Unity 5.3.3p1... 可能是 Unity 错误?

【问题讨论】:

  • 尝试在切换到前置摄像头之前暂停摄像头,然后再恢复。
  • 我是在停止摄像头而不是暂停它...伙计,我真的很讨厌 Android。现在,在我切换后,背面仍然可以工作,但仍然没有来自前置摄像头的图像。甚至没有黑屏
  • @TizianoCoroneo,考虑一下实际上总是同时拥有两个摄像头的技巧......只需使用两个 WebCamTexture 平面......并且只在给定时间显示您想要的摄像头!跨度>
  • 对于任何在谷歌上搜索到这里的人,这里是用于在所有平台上正确旋转、旋转和镜像的确切代码answers.unity3d.com/questions/773464/…跨度>
  • @JoeBlow 我刚刚花了 4 小时调整镜像缩放和一切……否则这篇文章将非常感谢。

标签: c# android unity3d camera


【解决方案1】:

注意

对于任何阅读的人,Unity 出现了一个新的 (2016) 插件,

https://www.assetstore.unity3d.com/en/#!/content/52154

如果你想在 Unity 中使用设备相机,基本上你“必须得到这个”。

Unity 的设备摄像头是 Unity 中最糟糕的东西——它甚至连 alpha 质量都算不上。这是 Unity 中最糟糕的事情,他们把它包括在内很荒谬,这只是一个测试运行。

编写一个双平台真正的原生高速相机插件非常困难。现在第一个出现了,除了使用它之外别无选择。 Unity 的废话是不可能的,您可以轻松地花费 2-3 周的时间来尝试让粗糙的相机正常工作。


对于更换相机的灾难,这是一种相当简单的方法!

public void CycleCams()
        {
        StartCoroutine(_cycle());
        }
    
    private IEnumerator _cycle()
        {
        WebCamDevice[] d = WebCamTexture.devices;
        if ( d.Length <= 1 )
            {
            Debug.Log("only one.");
            if (d.Length==1) Debug.Log("Name is " +d[0].name);
            yield break;
            }
        
        Debug.Log("0 " +d[0].name);
        Debug.Log("1 " +d[1].name);
        
        if ( wct.deviceName == d[0].name )
            {
            wct.Stop();
            yield return new WaitForSeconds(.1f);
            wct.deviceName = d[1].name;
            yield return new WaitForSeconds(.1f);
            wct.Play();
            
            nameDisplay.text = "\"" +wct.deviceName +"\"";
            yield break;
            }
        
        if ( wct.deviceName == d[1].name )
            {
            wct.Stop();
            yield return new WaitForSeconds(.1f);
            wct.deviceName = d[0].name;
            yield return new WaitForSeconds(.1f);
            wct.Play();
            
            nameDisplay.text = "\"" +wct.deviceName +"\"";
            yield break;
            }
        }

【讨论】:

  • 真正的防弹。我有几乎相同的代码,解决方案是将我的函数转换为协程并等待那几分之一秒。谢谢(顺便说一句,我正要团结一致地抱怨他们在网络摄像头纹理上的糟糕文档)
  • 我也设法做到了,但我再说一遍:使用 UGLY 解决方案。 #if #elif 用于操作系统,并手动检查设备方向、哪个摄像头正在工作等
  • 我通过记录 Webcamtexture.devices 获得了这些名称。似乎数组的第一个元素(最好不要使用它的名字)它总是朝后->第二个总是朝前;否则,您可以检查 WebCamDevice.isFrontFacing (或类似的东西),但我实际上不知道有多少是可靠的
  • 是的..你说的很对。名字无所谓。我现在只是假设如果有两个项目,第二个是自拍相机。好想法。干杯
【解决方案2】:

我必须告诉你,多年来一直在破解 Android ROM 并搞乱,你会经常遇到这种情况。最糟糕的过去是由于制造商使用的固件,您的程序可能在一部手机上完美运行,但由于制造商保存东西的程度有多分散,您的程序可能无法在另一部手机上完美运行。继续使用 Marshmallow,由于他们现在对每个人施加的限制,您会越来越少地看到这一点。我建议只为这部分代码学习一点 Java,然后直接从 Unity 调用它。

【讨论】:

  • 我已经解决了丑陋的信息,但仍然没有来自前置摄像头的图像。三星 Galaxy S4 GT - i9506 与 Android 5.0.1
猜你喜欢
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多