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/


相关文章
|
图形学
Unity射线检测的避坑指南
Unity射线检测的避坑指南
|
9月前
|
安全 图形学
Unity射线检测的“坑”
在 Unity 中,射线检测是常用功能,但也存在一些常见问题。首先是层(Layer)设置问题,如射线忽略某些层或误检测到不期望的层,需正确设置 LayerMask。其次是碰撞体相关问题,包括碰撞体未启用或类型不匹配,确保碰撞体启用并合理设置属性。再者是射线起始点和方向问题,错误的位置或方向计算会导致检测失败,需准确设置起始点和方向。此外,频繁进行射线检测或检测范围过大会影响性能,应减少检测次数并合理设置范围。最后,在多线程中进行射线检测可能导致错误,应避免在非主线程中直接调用射线检测。
|
9月前
|
图形学
unity 扇形范围检测目标
本文介绍了两种实现扇形范围检测的方法。第一种方法通过计算目标点与技能释放者之间的距离和夹角,判断目标是否在指定的扇形范围内。代码主要利用了`Vector3.Distance`和`Vector3.Dot`进行距离和角度的计算。 第二种方法则使用摄像机射线检测,分为两个脚本:一个挂载在摄像机上,负责发射多条射线并检测碰撞对象;另一个挂载在目标物体上,处理被发现后的逻辑。摄像机脚本通过`Physics.Raycast`检测敌人或障碍物,并调用目标物体的响应函数。该方法适用于更复杂的场景,如视野检测和敌人发现机制。
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
967 6
|
数据可视化 vr&ar C#
小功能⭐️Unity解决物体移动速度过快不能检测到碰撞
小功能⭐️Unity解决物体移动速度过快不能检测到碰撞
|
图形学
Unity小游戏——武士和怪物的碰撞检测
Unity小游戏——武士和怪物的碰撞检测
246 0
|
图形学
Unity射线检测3d,2D,正交透视。
使用射线功能制作点击物体获取物体名字。可以做简单点击相应。 3D射线检测,Camera 在正交模式与透视模式皆可使用 void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.
2060 0

热门文章

最新文章