IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity2020 AR传送门开发(ARFoundation) -> 正文阅读

[游戏开发]Unity2020 AR传送门开发(ARFoundation)

Unity版本:2020.3.0

先看看成品效果

AR传送门(一)

一、AR环境搭建

我这边开发AR用的是ARFoundation,集成了ARCore和ARKit的功能,AR环境的搭建有两种方式:
1、直接使用unity提供的AR模板
在unityHub面板新建项目,弹出如下弹框,选择AR模板,设置好项目名称和位置,创建。
在这里插入图片描述
进入项目后,可以在Project视图中找到SampleScene场景,如下图,是三个核心游戏体。
在这里插入图片描述

2、如果是在已有项目上添加AR功能,则可以手动导入AR支持。
打开项目,Window–>PackageManager,选择UnityRegistry
在这里插入图片描述
搜索XR(unity现在把AR/VR都归到了XR),选择AR支持,发布安卓选ARCore,发布iOS选择ARKit,点击Install导入,我这里已经导入过了,所以显示Remove
在这里插入图片描述
导入完之后,可以在Project视图下看到Packages有哪些包
在这里插入图片描述
导完包后,可以在GameObject选项下看到XR选项,选择AR Session Origin和AR Session ,AR的基本环境便搭好了。
在这里插入图片描述

AR环境搭建好以后,记得把项目切换成安卓平台,打开Edit–>ProjectSetting,进行XR设置。(老版的XR设置在Player里面,勾选virtual reality Support)
选择安卓平台,勾选ARCore,项目如果想启动后就进入AR,勾选Initialize XR on StartUp,否则不勾选 手动开启,开启方法后面再说。
在这里插入图片描述

二、AR传送门原理

1、制作传送门

如下效果,外部看不到传送门里的游戏体,只能从门看到内部情况。
这个传送门预设体我会放在文末的项目链接里。
在这里插入图片描述
在这里插入图片描述
这个效果主要通过 通道遮罩 ColorMask实现。

ColorMask可以让我们制定渲染结果的输出通道,而不是通常情况下的RGBA这4个通道全部写入。可选参数是 RGBA 的任意组合以及 0, 这将意味着不会写入到任何通道,可以用来单独做一次Z测试,而不将结果写入颜色通道

Shader "DepthMask" {
   
    SubShader {
        // Render the mask after regular geometry, but before masked geometry and
        // transparent things.
       
        Tags {"Queue" = "Geometry-10" }
       
        // Turn off lighting, because it's expensive and the thing is supposed to be
        // invisible anyway.
       
        Lighting Off

        // Draw into the depth buffer in the usual way.  This is probably the default,
        // but it doesn't hurt to be explicit.

        ZTest LEqual
        ZWrite On

        // Don't draw anything into the RGBA channels. This is an undocumented
        // argument to ColorMask which lets us avoid writing to anything except
        // the depth buffer.

        ColorMask 0

        // Do nothing specific in the pass:

        Pass {}
    }
}

2、AR平面检测,生成传送门

在AR Session Origin游戏体下添加AnchorCreator组件,用AR模板的应该直接就有。然后把自己做好的传送门预设体拖到Anchor Prefab上,当应用开启AR相机检测到平面后,点击屏幕,会在指定位置自动生成我们的传送门。

在这里插入图片描述

三、代码控制AR的状态检测、开启及关闭

如果项目并不是进来就开启AR,而是在特定时刻手动打开,可以接着看下面的方法:

1、如何判断设备是否满足AR硬件需求

 //开启AR支持检测
            if ((ARSession.state == ARSessionState.None) ||
                (ARSession.state == ARSessionState.CheckingAvailability))
            {
                yield return ARSession.CheckAvailability();
            }

            if (ARSession.state == ARSessionState.Unsupported)
            {
                tip.text = "当前设备不支持AR功能";
                //不支持AR的后续处理
                UnsupportedAR();
                yield break;
            }
            else if (ARSession.state == ARSessionState.NeedsInstall)
            {
                tip.text = "当前设备需要安装ARCore以支持AR功能";
                yield return ARSession.Install();
            }
            else
            {
                tip.text = "当前设备支持AR功能";
                LoadARScene();
            }

2、如何主动开启、关闭AR功能

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
using UnityEngine.XR.Management;
using UnityEngine.SceneManagement;
using MR_LBS.Client.Unity3D;


public class ARStateCheck : MonoBehaviour
{
    public Text tip;

    public void OpenAR()
    {
#if UNITY_EDITOR
        LoadARScene();
#else
            StartCoroutine(StartXR());
#endif
    }

    public IEnumerator StartXR()
    {
        yield return XRGeneralSettings.Instance.Manager.InitializeLoader();

        if (XRGeneralSettings.Instance.Manager.activeLoader == null)
        {
            Debug.LogError("Initializing XR Failed. Check Editor or Player log for details.");
        }
        else
        {
            Debug.Log("Starting XR...");
            XRGeneralSettings.Instance.Manager.StartSubsystems();
            gameObject.AddComponent<ARSession>();
            yield return null;

            //开启AR支持检测
            if ((ARSession.state == ARSessionState.None) ||
                (ARSession.state == ARSessionState.CheckingAvailability))
            {
                yield return ARSession.CheckAvailability();
            }

            if (ARSession.state == ARSessionState.Unsupported)
            {
                tip.text = "当前设备不支持AR功能";
                //不支持AR的后续处理
                UnsupportedAR();
                yield break;
            }
            else if (ARSession.state == ARSessionState.NeedsInstall)
            {
                tip.text = "当前设备需要安装ARCore以支持AR功能";
                yield return ARSession.Install();
            }
            else
            {
                tip.text = "当前设备支持AR功能";
                LoadARScene();
            }
        }
    }

    /// <summary>
    /// 加载AR场景
    /// </summary>
    void LoadARScene()
    {
        SceneManager.LoadScene("ARScene", LoadSceneMode.Single);
    }

    public void StopXR()
    {
        Debug.Log("Stopping XR...");
        XRGeneralSettings.Instance.Manager.StopSubsystems();
        XRGeneralSettings.Instance.Manager.DeinitializeLoader();
        Debug.Log("XR stopped completely.");
        SceneManager.LoadScene("ARScene", LoadSceneMode.Single);

        Destroy(UnityPhotonClient.Instance.gameObject);
        StopAllCoroutines();
        SceneManager.LoadScene("LogIn");
    }

    /// <summary>
    /// 不支持AR的后续处理
    /// </summary>
    public void UnsupportedAR() {

    }

}

四、项目下载链接

https://download.csdn.net/download/qq_43505432/33628985
代码控制AR用下图两个场景
在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:48:29  更:2021-10-23 12:49:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:57:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码