Unity WebGL WebcamTexture网络摄像头灯在禁用摄像头后保持亮起状态

时间:2017-04-04 16:16:26

标签: c# unity3d camera webcam unity-webgl

我正在使用以下脚本在WebGL上启用/禁用网络摄像头。

它在编辑器上工作正常,但在浏览器上,网络摄像头指示灯在禁用WebcamTexture后仍保持打开状态。

它发生在Chrome和Firefox上。

有什么想法吗?

感谢。

WebCamTexture _webcamTexture;

public void Enable()
{
    #if UNITY_EDITOR || DEVELOPMENT_BUILD
    Debug.Log("Enable");
    #endif

    _enabled = true;
}

public void Disable()
{
    #if UNITY_EDITOR || DEVELOPMENT_BUILD
    Debug.Log("Disable");
    #endif

    _enabled = false;
}

#region MONOBEHAVIOUR

void Update()
{
    if(_enabled)
    {
        if(_webcamTexture == null)
        {
            while(!Application.RequestUserAuthorization(UserAuthorization.WebCam).isDone)
            {
                return;
            }

            if (Application.HasUserAuthorization(UserAuthorization.WebCam)) 
            {
                #if UNITY_EDITOR || DEVELOPMENT_BUILD
                Debug.Log("Webcam authorized");
                #endif

                _webcamTexture = new WebCamTexture (WebCamTexture.devices[0].name);
                _webcamTexture.Play (); 
            } 
            else 
            {
                #if UNITY_EDITOR || DEVELOPMENT_BUILD
                Debug.Log("Webcam NOT authorized");
                #endif
            }   
        }
        else if (_webcamTexture.isPlaying)
        {
            if(!_ready)
            {
                if (_webcamTexture.width < 100)
                {
                    return;
                }

                _ready = true;
            }

            if(_webcamTexture.didUpdateThisFrame)
            {
                _aspectRatioFitter.aspectRatio =  (float)_webcamTexture.width / (float)_webcamTexture.height;

                _imageRectTransform.localEulerAngles = new Vector3 (0, 0, -_webcamTexture.videoRotationAngle);

                _image.texture = _webcamTexture;
            }
        }
    }
    else 
    {
        if(_webcamTexture != null) 
        {
            _webcamTexture.Stop ();
            _webcamTexture = null;

            _image.texture = null;
        }
    }
}

#endregion

1 个答案:

答案 0 :(得分:0)

代码在编辑器中工作的唯一原因是因为编辑器会为您清理一些东西。单击停止后,即使没有调用WebCamTexture.Stop ();,摄像机也会自动停止。

不幸的是,这不会发生在构建中。您必须明确调用WebCamTexture.Stop ();才能停止它。正确的地方是Disable()函数。

public void Disable()
{
    if(_webcamTexture != null) 
    {
        _webcamTexture.Stop ();
    }
}

编辑:

不是使用布尔变量来禁用相机,而是创建一个函数并将该函数连接到停止按钮。调用该功能时,它会停止摄像机。

public void disableCamera()
{
    if(_webcamTexture != null) 
    {
        _webcamTexture.Stop ();
    }
}