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

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值