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

来源:互联网 发布:解压软件安装包 编辑:程序博客网 时间:2024/04/16 19:32

很多时候我们需要制作一个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;      }}

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

下面为实际运行效果。我把这个方法绑定在两个按钮上
虚拟环境,镜头包裹
这里写图片描述
显示环境,镜头未包裹(原图太大上传不了)
这里写图片描述

原创粉丝点击