我正在使用Unity开发适用于Android的应用。 尝试使用前置摄像头,从WebCamTexture获取数据。后面的工作正常,但是当我试图翻转相机时,这个可怕的东西出现了:
**bitstream == (int)0xAFAFAFAF
作为统一控制台中的错误。然后,即使使用后置摄像头,WebCamTexture也会停止工作。 有什么想法吗?
P.S。使用Unity 5.3.3p1 ......可能是一个Unity错误吗?
答案 0 :(得分:6)
对于任何人来说,已经为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;
}
}
答案 1 :(得分:3)
我必须告诉你多年来攻击Android ROM并乱搞,你会经常遇到这种情况。最糟糕的过去是由于制造商使用的固件,你的程序可能在一部手机上完美运行而不是另一部手机,因为制造商保留了多少零碎的东西。与Marshmallow一起向前看,由于他们现在对每个人的限制,你会越来越少地看到它。我建议你只需要为代码的这一部分学习一点Java,然后直接从Unity调用它。