我正在使用Unity为Android开发应用程序。尝试使用前置摄像头,从WebCamTexture获取数据。后置摄像头可以正常工作,但是当我尝试翻转相机时,出现了这个糟糕的情况:
**bitstream == (int)0xAFAFAFAF
作为Unity控制台中的错误。然后,WebCamTexture完全停止工作,即使是后置摄像头也无法使用。有什么想法吗?
附注:使用的是Unity 5.3.3p1...可能是Unity的一个bug吗?
我正在使用Unity为Android开发应用程序。尝试使用前置摄像头,从WebCamTexture获取数据。后置摄像头可以正常工作,但是当我尝试翻转相机时,出现了这个糟糕的情况:
**bitstream == (int)0xAFAFAFAF
针对阅读本文的人,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;
}
}
经过多年的Android ROM破解和调试,我必须告诉你,你会经常遇到这种情况。最糟糕的是,由于制造商使用的固件不同,你的程序在一部手机上运行得很好,但在另一部手机上却不能正常运行,这是因为制造商让事情变得非常复杂。随着Marshmallow的发布,由于他们对所有人都加大了限制,你将看到越来越少的这种情况发生。我建议你只需要学习一点Java代码,并直接从Unity中调用它。