2016-03-07 148 views
4

我正在使用Unity为Android开发应用程序。 试图使用前置摄像头,从WebCamTexture获取数据。后面的工作正常,但当我试图翻转相机这个可怕的事情出来:Unity Android前置摄像头WTF bug

**bitstream == (int)0xAFAFAFAF 

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

P.S.使用Unity 5.3.3p1 ...可能是Unity错误?

+1

尝试在切换到前置摄像头之前暂停摄像头并在之后恢复。 – EvilTak

+1

我正在停止相机,而不是暂停它... 我真的很讨厌Android的人。现在,在我切换后,后视仍能正常工作,但前置摄像头仍然没有图像。甚至没有黑屏 –

+0

@TizianoCoroneo,考虑*实际上总是得到两个相机的诀窍..只使用两个WebCamTexture飞机..并且只在给定时间显示你想要的相机!* – Fattie

回答

6

注:

的人看书,一个新的(2016)插件已经出现了团结,

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

基本上你“必须得到这个”如果你想在Unity使用设备摄像头。

Unity的设备相机的东西是Unity中最糟糕的东西 - 它的字面上甚至不是alpha质量。这是Unity中最糟糕的事情,他们把它包括在内是荒谬的,这只是一次测试。

要编写一个双平台真正的本地高速摄像头插件是非常困难的。现在第一个出现了,没有什么比使用它真正的选择。 Unity的废话是不可能的,你可以轻松地花费2-3周的时间试图让粗糙的相机工作。


下面是一个相当bulletroof方法的灾难改变相机!

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; 
      } 
     } 
+0

真正的防弹。我有几乎相同的代码,解决方案是在协程中转换我的功能,并等待几分之一秒。谢谢(我即将抱怨团结为他们糟糕的文档上webcamtexture顺便说一句) –

+0

我设法得到这一点,但我再说一遍:用** UGLY **解决方案。 #if #elif用于操作系统,以及手动检查设备方向,相机正在工作等等。 –

+0

我通过记录Webcamtexture.devices获得了这些名称。而且看起来阵列的第一个元素(最好不要用它的名字)总是后面的 - >第二个元素总是前面的;否则,你可以检查WebCamDevice.isFrontFacing(或类似的东西),但我不知道有多可靠 –

3

我不得不告诉你,从多年的黑客入侵Android ROM和乱搞,你会经常遇到这种情况。过去最糟糕的情况是由于制造商使用的固件,您的程序可能在一部手机上完美运行,但由于制造商保存的东西多么分散,因此无法在另一部手机上运行。与棉花糖一起前进,你会看到这一点越来越少,因为他们现在对每个人都施加了限制。我建议你只需要学习一小部分Java代码,然后直接从Unity中调用它。

+0

我解决了丑陋的信息,但仍然没有来自前置摄像头的图像。 三星Galaxy S4 GT - i9506与Android 5.0.1 –