Unity Android 前置摄像头 WTF 错误
Unity Android front facing Camera WTF bug
我正在使用 Unity 为 Android 开发应用程序。
尝试使用前置摄像头,从 WebCamTexture 获取数据。后向工作正常,但当我尝试翻转相机时,出现了这个糟糕的事情:
**bitstream == (int)0xAFAFAFAF
作为统一控制台中的错误。然后,WebCamTexture 完全停止工作,即使使用后置摄像头也是如此。
有什么想法吗?
P.S。使用 Unity 5.3.3p1...可能是 Unity 错误?
我必须告诉你,根据多年破解 Android ROM 和乱搞的经验,你会 运行 经常遇到这种情况。最糟糕的过去是由于制造商使用的固件,您的程序可能 运行 在一个 phone 上完美,但在另一个 phone 上却不行,因为制造商保存的东西是多么分散。随着 Marshmallow 的发展,你会越来越少看到这种情况,因为他们现在对每个人都施加了限制。我建议只学习这部分代码的一点点 Java 并直接从 Unity 调用它。
注意
对于任何阅读者,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;
}
}
我正在使用 Unity 为 Android 开发应用程序。 尝试使用前置摄像头,从 WebCamTexture 获取数据。后向工作正常,但当我尝试翻转相机时,出现了这个糟糕的事情:
**bitstream == (int)0xAFAFAFAF
作为统一控制台中的错误。然后,WebCamTexture 完全停止工作,即使使用后置摄像头也是如此。 有什么想法吗?
P.S。使用 Unity 5.3.3p1...可能是 Unity 错误?
我必须告诉你,根据多年破解 Android ROM 和乱搞的经验,你会 运行 经常遇到这种情况。最糟糕的过去是由于制造商使用的固件,您的程序可能 运行 在一个 phone 上完美,但在另一个 phone 上却不行,因为制造商保存的东西是多么分散。随着 Marshmallow 的发展,你会越来越少看到这种情况,因为他们现在对每个人都施加了限制。我建议只学习这部分代码的一点点 Java 并直接从 Unity 调用它。
注意
对于任何阅读者,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;
}
}