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

了解如何使用 Instant Placement API,或 永久性光线投射

前提条件

确保您了解 AR 基础概念 以及如何在继续之前配置 ARCore 现场录像

概念名称

在 AR 基础和 ARCore SDK for Unity。下表列出了这些列,以便于您参考。

AR 基础 适用于 Unity 的 ARCore SDK
永久性光线透射 即时展示位置
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,即时放置(永久性光线投射)开箱即用 Foundation 软件包。请按以下步骤设置场景。

AR 基础 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 开头。 然后转换到 Tracking。一旦跟踪状态变为 Tracking, 而不会还原到 Limited