您的位置:首页 > 移动开发 > Unity3D

如何在unity3d中实现AR镜头全包裹和AR镜头不包裹效果

2017-12-06 10:36 615 查看
很多时候我们需要制作一个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;
}
}


然后把这个脚本应用到场景中。传入参数。在运行的时候根据需要去调用里面的方法。

下面为实际运行效果。我把这个方法绑定在两个按钮上

虚拟环境,镜头包裹



显示环境,镜头未包裹(原图太大上传不了)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d 摄像头 ar 包裹