Unity Android前置摄像头WTF bug

时间:2016-03-07 13:53:22

标签: c# android unity3d camera

我正在使用Unity开发适用于Android的应用。 尝试使用前置摄像头,从WebCamTexture获取数据。后面的工作正常,但是当我试图翻转相机时,这个可怕的东西出现了:

**bitstream == (int)0xAFAFAFAF

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

P.S。使用Unity 5.3.3p1 ......可能是一个Unity错误吗?

2 个答案:

答案 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调用它。