为了方便AR开发交流,博主建立了一个群 :891555732,欢迎一起讨论
- 两种方法 : http://www.arvrschool.com/read-7349
- 使用的方法 : https://www.cnblogs.com/shenlaiyaoshi/p/8414197.html
1.MainCamera add VuforiaBehaviour脚本并取消勾选。
https://blog.csdn.net/Testiness_Wind/article/details/79107948
2.使用以下脚本,这个测试有效,不过我还需要跳转到vuforia识别场景打开摄像头,所以并未使用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;
public class DisableVuforia : MonoBehaviour
{
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (GetComponent<VuforiaBehaviour>().enabled)
{
GetComponent<VuforiaBehaviour>().enabled = false;
}
if (GetComponent<VideoBackgroundBehaviour>().enabled)
{
GetComponent<VideoBackgroundBehaviour>().enabled = false;
}
GetComponent<Camera>().clearFlags = CameraClearFlags.Skybox;
}
}
3.已封装好的方法
// 关闭相机
public void CloseCameraDevice ()
{
CameraDevice.Instance.Stop();
CameraDevice.Instance.Deinit();
}
// 打开相机
public void OpenCameraDevice ()
{
CameraDevice.Instance.Init(CameraDevice.CameraDirection.CAMERA_DEFAULT);
CameraDevice.Instance.Start();
}
// 关闭识别
public void CloseCloudReco ()
{
CloudRecoBehaviour cloudRecoBehaviour = GameObject.FindObjectOfType(typeof(CloudRecoBehaviour)) as CloudRecoBehaviour;
cloudRecoBehaviour.CloudRecoEnabled = false;
}
// 打开识别
public void OpenCloudReco ()
{
CloudRecoBehaviour cloudRecoBehaviour = GameObject.FindObjectOfType(typeof(CloudRecoBehaviour)) as CloudRecoBehaviour;
cloudRecoBehaviour.CloudRecoEnabled = true;
}
public void OpenFlash () {
CameraDevice.Instance.SetFlashTorchMode (true);
}
//关闭闪光灯
public void CloseFlash () {
CameraDevice.Instance.SetFlashTorchMode (false);
}
但是这里有个坑,直接在start方法里面调用时没有效的,我是在update中判断摄像机是否处于激活状态再调用
private void Update()
{
if(CameraDevice.Instance.IsActive())
DataCommon.instance.CloseCameraDevice();
}
等到从vuforia识别场景跳回无需识别场景时调用OpenCameraDevice()方法即可
另外,可能会有很多人跳转会出现问题,这是由于场景有多个摄像机造成的,因为vuforia场景只能有一个主摄像机(就是挂着VuforiaBehaviour的摄像头),但是如果我们初始化场景是无需识别场景,场景中的摄像头上会自动加载这个脚本,造成跳转时出问题,解决方法就是跳转之前销毁无需识别场景摄像头