2016-03-07 117 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 –