AR Foudation案例解析(一) ------TogglePlaneDetection

一.环境

案例网址 : https://github.com/Unity-Technologies/arfoundation-samples.git
官方文档网址 : https://docs.unity3d.com/Packages/[email protected]/api/UnityEngine.XR.ARFoundation.html
Unity版本 : 2019.3.0
SDK版本 :

AR Foudation案例解析(一) ------TogglePlaneDetection_第1张图片

二.代码解析

1.功能

停止/启动平面检测并隐藏/显示已检测平面

2.项目结构

AR Foudation案例解析(一) ------TogglePlaneDetection_第2张图片

主要脚本都在AR Session Origin上:


AR Foudation案例解析(一) ------TogglePlaneDetection_第3张图片

3.代码解析

其实原理非常简单,TogglePlaneDetection物体的Toggle点击事件是PlaneDetectionController脚本中的TogglePlaneDetection函数,此函数中首先置反ARPlaneManager.enabled,之后设置已识别平面的可见性

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;

/// 
///这个例子演示了如何切换平面检测,
///并隐藏或显示现有的平面。
/// 
[RequireComponent(typeof(ARPlaneManager))]
public class PlaneDetectionController : MonoBehaviour
{
    [Tooltip("用于显示平面检测消息的UI文本元素。")]
    [SerializeField]
    Text m_TogglePlaneDetectionText;

    /// 
    /// The UI Text element used to display plane detection messages.
    /// 
    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;
    }

    /// 
    /// 设置识别平面的可见性
    /// 
    /// Each planes' GameObject is SetActive with this value.
    void SetAllPlanesActive(bool value)
    {
        foreach (var plane in m_ARPlaneManager.trackables)
            plane.gameObject.SetActive(value);
    }

    void Awake()
    {
        m_ARPlaneManager = GetComponent();
    }

    ARPlaneManager m_ARPlaneManager;
}

17787668-4eca4da34eb71a37.png

你可能感兴趣的:(AR Foudation案例解析(一) ------TogglePlaneDetection)