很多时候我们需要制作一个AR的demo或产品,需要是实现与现实的交互或者制作的产品只需要AR特性但环境需要虚拟(类似与VR场景一样),这时候我们就要对AR进行镜头的包裹了。那么我们如何实现这样的效果呢?
其实实现的方法还是比较简单,需要的是在AR场景中把主摄像头下添加一个摄像头,然后把添加的这个摄像头的【Camera】组件和【Audio Listener】组件的Active去掉。也就是去掉组件前面的勾,然后添加一个脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ChangeCameraView : MonoBehaviour {
[Tooltip("需要切换的场景名称")]
public string LoadLevelName;//包裹AR镜头的场景
[Tooltip("现实场景摄像头名称")]
public string mainCameraName;//原来的主摄像头
[Tooltip("虚拟场景摄像头名称")]
public string thirdCameraName;//新添加的摄像头
//虚拟现实切换
public void changeCameraView(bool isVirtual){
Debug.Log ("loadscene: "+LoadLevelName);
Debug.Log ("mainCameraName: "+mainCameraName);
Debug.Log ("thirdCameraName: "+thirdCameraName);
//获取场景
Scene LoadLevelss= SceneManager.GetSceneByName (LoadLevelName);
if (isVirtual) {
//if (LoadLevelss==null) {//判断场景是否为空
SceneManager.LoadScene(LoadLevelName, LoadSceneMode.Additive);
//}
} else {
//if (LoadLevelss!=null) {//判断场景是否为空
SceneManager.UnloadSceneAsync (LoadLevelName);
//}
}
GameObject.Find (thirdCameraName).GetComponent<AudioListener>().enabled = isVirtual;
GameObject.Find (thirdCameraName).GetComponent<Camera>().enabled = isVirtual;
GameObject.Find (mainCameraName).GetComponent<AudioListener>().enabled = !isVirtual;
GameObject.Find (mainCameraName).GetComponent<Camera>().enabled = !isVirtual;
}
}
然后把这个脚本应用到场景中。传入参数。在运行的时候根据需要去调用里面的方法。
下面为实际运行效果。我把这个方法绑定在两个按钮上
虚拟环境,镜头包裹
显示环境,镜头未包裹(原图太大上传不了)