Unity学习3:如何显示与隐藏平面检测

80 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

👨‍🎓作者简介:一位喜欢写作,计科专业的大三菜鸟

🏡个人主页:starry陆离 的个人主页

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

@TOC

1.准备工作

首先搭建好基本环境,在AR Session Origin下添加一个AR Plane Manager对象,并添加一个预制体AR Default Plane到AR Plane Manager对象的Plane Prefab属性下(这一部分在Unity配置Android开发环境下有介绍不再记录)Unity配置Android开发环境与第一个Demo

image-20220116123721232

2.添加脚本

AR Plane Manager 负责管理检测平面相关工作,其有一个属性 enabled,设置 enabled=true 则是开启了平面检测,设置 enabled=false 则是关闭了平面检测,因此, 我们可以非常方便的用代码控制平面的检测与关闭。前文我们也学习到,ARPlaneManager 并不负责检 测到的平面的可视化渲染,因此,在关闭平面检测后我们还应该取消已检测到的平面的显示。

  1. 在Scripts文件夹下创建一个C#脚本,命名为 PlaneDetectionController
  2. 将脚本挂载到与AR Plane Manager组件相同的场景对象上
  3. 添加一个UI-Button,将按钮与脚本中的Toggle Plane Detection()函数绑定

image-20220116124932616

image-20220116125204717

image-20220116125320839

image-20220116125528438

image-20220116125637054

image-20220116130259718

 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.XR.ARFoundation;
 ​
 namespace UnityEngine.XR.ARFoundation.Samples
 {
     
     [RequireComponent(typeof(ARPlaneManager))]
     public class PlaneDetectionController : MonoBehaviour
     {
         [Tooltip("The UI Text element used to display plane detection messages.")]
         [SerializeField]
         Text m_TogglePlaneDetectionText;
 ​
         public Text togglePlaneDetectionText
         {
             get { return m_TogglePlaneDetectionText; }
             set { m_TogglePlaneDetectionText = value; }
         }
 ​
         public void TogglePlaneDetection()
         {
             m_ARPlaneManager.enabled = !m_ARPlaneManager.enabled;
 ​
             string planeDetectionMessage = "";
             if (m_ARPlaneManager.enabled)
             {
                 planeDetectionMessage = "Disable Plane Detection and Hide Existing";
                 SetAllPlanesActive(true);
             }
             else
             {
                 planeDetectionMessage = "Enable Plane Detection and Show Existing";
                 SetAllPlanesActive(false);
             }
 ​
             if (togglePlaneDetectionText != null)
                 togglePlaneDetectionText.text = planeDetectionMessage;
         }
 ​
         void SetAllPlanesActive(bool value)
         {
             foreach (var plane in m_ARPlaneManager.trackables)
                 plane.gameObject.SetActive(value);
         }
 ​
         void Awake()
         {
             m_ARPlaneManager = GetComponent<ARPlaneManager>();
         }
 ​
         ARPlaneManager m_ARPlaneManager;
     }
 }

3.添加事件的疑难:

UGUI中Button和Toggle 添加动态事件

Unity - 方法绑定到Button.OnClick

4.演示效果

www.bilibili.com/video/BV1sZ…

5.下期预告

AR tracked image manager(2D图像检测追踪管理器)

跟踪图像管理器是一种可跟踪管理器,执行二维图像跟踪。

跟踪图像管理器为环境中检测到的每个图像创建游戏对象。在可以检测到图像之前,必须指示管理器查找编译到参考图像库中的一组参考图像。

何为参考图像库(Reference Image library)?

参考图像库用来存储一系列的参考图像用于对比,每一个图像跟踪程序都必须有一个参考图 像库,但需要注意的是,参考图像库中存储的实际是参考图像的特征值信息而不是原始图 像,这有助于提高对比速度与鲁棒性。参考图像库越大,图像对比就会越慢,建议参考图像 库的图像不要超过 1000 张。

参考图片库可以在运行时设置,但只要启用了跟踪图片管理器组件,参考图片库必须为非空。

您可以将参考图像库设置为 XRReferenceImageLibraryRuntimeReferenceImageLibrary。只能在 Editor 中创建 XRReferenceImageLibrary,不能在运行时修改。