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

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

@TOC

准备工作

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

添加脚本

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

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

usingSystem.Collections.Generic;

usingUnityEngine;

usingUnityEngine.UI;

usingUnityEngine.XR.ARFoundation;

 

namespaceUnityEngine.XR.ARFoundation.Samples

{

   /// <summary>

   /// This example demonstrates how to toggle plane detection,

   /// and also hide or show the existing planes.

   /// </summary>

   [RequireComponent(typeof(ARPlaneManager))]

   publicclassPlaneDetectionController : MonoBehaviour

   {

       [Tooltip("The UI Text element used to display plane detection messages.")]

       [SerializeField]

       Textm_TogglePlaneDetectionText;

 

       /// <summary>

       /// The UI Text element used to display plane detection messages.

       /// </summary>

       publicTexttogglePlaneDetectionText

       {

           get { returnm_TogglePlaneDetectionText; }

           set { m_TogglePlaneDetectionText=value; }

       }

 

       /// <summary>

       /// Toggles plane detection and the visualization of the planes.

       /// </summary>

       publicvoidTogglePlaneDetection()

       {

           m_ARPlaneManager.enabled=!m_ARPlaneManager.enabled;

 

           stringplaneDetectionMessage="";

           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;

       }

 

       /// <summary>

       /// Iterates over all the existing planes and activates

       /// or deactivates their <c>GameObject</c>s'.

       /// </summary>

       /// <param name="value">Each planes' GameObject is SetActive with this value.</param>

       voidSetAllPlanesActive(boolvalue)

       {

           foreach (varplaneinm_ARPlaneManager.trackables)

               plane.gameObject.SetActive(value);

       }

 

       voidAwake()

       {

           m_ARPlaneManager=GetComponent<ARPlaneManager>();

       }

 

       ARPlaneManagerm_ARPlaneManager;

   }

}

添加事件的疑难:

UGUI中Button和Toggle 添加动态事件

Unity - 方法绑定到Button.OnClick

演示效果

https://www.bilibili.com/video/BV1sZ4y1f77G/


相关文章
|
7月前
|
图形学
Unity射线检测的避坑指南
Unity射线检测的避坑指南
|
8月前
|
图形学
|
8月前
|
图形学
|
存储 vr&ar C#
Unity学习4:如何实现2D图像跟踪(涂色类AR项目实践1)
AR tracked image manager(2D图像检测追踪管理器)
353 0
Unity学习4:如何实现2D图像跟踪(涂色类AR项目实践1)
|
图形学
Unity射线检测3d,2D,正交透视。
使用射线功能制作点击物体获取物体名字。可以做简单点击相应。 3D射线检测,Camera 在正交模式与透视模式皆可使用 void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.
1878 0
|
图形学 Android开发
Unity从学习到赚钱系列-聊天气泡及字体模糊
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
261 0
|
人工智能 数据可视化 图形学
Unity火爆插件Behavior Designer行为树插件学习
如果要让游戏里的角色或者NPC能执行预设的AI逻辑,最简单的用IF..ELSE...神器既可以实现, 但是再复杂的一般用经典的状态机来切换状态,但是写起来比较麻烦。相对的,行为树(Behavior Tree)理解和编辑起来就非常简单了。
|
图形学 Windows 容器
Unity学习系列一简介
一、简介 Unity的目标是为了提升"依赖注入"的思想,去建立更加松耦合的系统.patterns & practices 小组在那个时候实现DI的方式和我们现在认为的DI有所不同,DI不是单一的可重复使用的容器,而是应该专门用于正在使用它的系统.
1561 0
|
图形学 Go
Unity 之 plane.Raycast 射线检测
原来一直用Physics.Raycast或者对应的2D射线检测,今天无意中发一个有趣射线检测,话不多说直接上示例 void Update() LateUpdate() 示例代码 using UnityEngine; publ...
1984 0
|
图形学
Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分...
2723 0