2017-04-04 8 views
0

次のスクリプトを使用してWebGL上のウェブカメラを有効/無効にしています。Unity WebGL Webカメラのテクスチャカメラの無効化後にウェブカメラのライトが点灯し続ける

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 

答えて

0

Editorでコードが動作している唯一の理由は、Editorがいくつかのものをクリーンアップするためです。停止をクリックすると、WebCamTexture.Stop();が呼び出されなくてもカメラは自動的に停止します。

残念ながら、これはビルドでは発生しません。これを停止するには、明示的にWebCamTexture.Stop();を呼び出す必要があります。これを行う適切な場所は、Disable()の機能です。

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

EDIT:

代わりに、カメラを無効にする機能を作成し、あなたのストップボタンにその機能を接続するためのブール変数を使用します。この関数が呼び出されると、カメラが停止します。

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

回答ありがとうございます。私は_webcamTexture.Stop()を呼び出しています。 _enabledがfalseに設定されている場合はUpdate内にあります。私は既にDisableメソッドの中で試してみました。違いはありませんよね? –

+0

私はあなたが知っています。それは単に間違っている。 'Update'関数は、appが存在するときに終了します。 if文が実行されていない場合はどうなりますか?そのため、 'Update'関数ではなく、' OnDisable'関数での処理を止めたり、終了したりする必要があります。私の解決策を試してみてください。この問題は、タブを閉じると発生しますか? – Programmer

+0

UIボタンを押すとDisableメソッドが呼び出されます。私はアプリを終了していない。私は、アプリケーションを実行してカメラを有効/無効にしたいと思います。タブを閉じるとライトが消えます。 –

関連する問題