AR Foundation 即时展示位置开发者指南

了解如何在您自己的应用中使用 Instant Placement API(即持久性光线投射)。

前提条件

确保您了解基本 AR 概念以及如何配置 ARCore 会话,然后再继续。

概念名称

对于 AR 基础和 ARCore SDK for Unity,某些概念和方法的名称可能有所不同。下表列出了这些建议,以便您轻松参考。

AR 基础 ARCore SDK for Unity
持久性光线投射 即时展示位置
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(无对等) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

前提条件

本指南假定您已安装并配置了 Unity。否则,请参阅 ARCore Extensions for AR Foundation 使用入门中的安装和设置步骤。

配置与 ARRaycastManager 的新会话

AR 基础软件包中提供了开箱即用的即时放置(持久性光线投射)。请按照以下步骤设置您的场景。

AR Foundation 4.x

  1. 添加预定义的游戏对象 AR Session OriginAR Session

  2. AR Raycast Manager 组件添加到 AR Session Origin 游戏对象中。

当 Raycast Prefab 不为 null 时,ARRaycastManager 会实例化预制件,并自动将其姿势与 ARRaycast 的姿势同步。

AR 基础 5.x

  1. 添加预定义的游戏对象 XR OriginAR Session

  2. AR Raycast Manager 组件添加到 XR Origin 游戏对象中。

当 Raycast Prefab 不为 null 时,ARRaycastManager 会实例化预制件,并自动将其姿势与 ARRaycast 的姿势同步。

放置对象

在新的 ARCore 会话中,使用 ARRaycastManager.AddRaycast(Vector2, float) 执行点击测试。

public ARRaycastManager RaycastManager; // set from the Editor Inspector.

void Update()
{
    Touch touch;
    if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
    {
        return;
    }

    if (EventSystem.current.IsPointerOverGameObject(touch.fingerId))
    {
        return;
    }

    ARRaycast raycast = RaycastManager.AddRaycast(touch.position, _estimateDistance);
    if (raycast != null)
    {
        // You can instantiate a 3D object here if you haven’t set Raycast Prefab in the scene.
        …
    }
}

监控 ARRaycast 跟踪状态

如果 ARCore 具有准确的 3D 姿势,ARRaycast.trackingState 将为 Tracking。否则,它将从 Limited 开始,并在 ARCore 获得准确的 3D 姿势后过渡到 Tracking。一旦跟踪状态变为 Tracking,它不会还原为 Limited