我正在使用以下脚本在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
答案 0 :(得分:0)
代码在编辑器中工作的唯一原因是因为编辑器会为您清理一些东西。单击停止后,即使没有调用WebCamTexture.Stop ();
,摄像机也会自动停止。
不幸的是,这不会发生在构建中。您必须明确调用WebCamTexture.Stop ();
才能停止它。正确的地方是Disable()
函数。
public void Disable()
{
if(_webcamTexture != null)
{
_webcamTexture.Stop ();
}
}
编辑:
不是使用布尔变量来禁用相机,而是创建一个函数并将该函数连接到停止按钮。调用该功能时,它会停止摄像机。
public void disableCamera()
{
if(_webcamTexture != null)
{
_webcamTexture.Stop ();
}
}