次のスクリプトを使用して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
回答ありがとうございます。私は_webcamTexture.Stop()を呼び出しています。 _enabledがfalseに設定されている場合はUpdate内にあります。私は既にDisableメソッドの中で試してみました。違いはありませんよね? –
私はあなたが知っています。それは単に間違っている。 'Update'関数は、appが存在するときに終了します。 if文が実行されていない場合はどうなりますか?そのため、 'Update'関数ではなく、' OnDisable'関数での処理を止めたり、終了したりする必要があります。私の解決策を試してみてください。この問題は、タブを閉じると発生しますか? – Programmer
UIボタンを押すとDisableメソッドが呼び出されます。私はアプリを終了していない。私は、アプリケーションを実行してカメラを有効/無効にしたいと思います。タブを閉じるとライトが消えます。 –