AR 基本概念的即時刊登位置開發人員指南

瞭解如何在自家應用程式中使用 Instant Placement API持久性光柵

必要條件

請務必先瞭解基本 AR 概念,並瞭解如何設定 ARCore 工作階段,再繼續操作。

概念名稱

AR Foundation 和 Unity 適用的 ARCore SDK 之間,某些概念和方法的名稱可能不同。下表列出這些項目,方便您參考。

AR 基礎課程 Unity 適用的 ARCore SDK
持久性光線投射 即時刊登
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(無對等性) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

必要條件

本指南假設您已安裝及設定 Unity。如果沒有,請參閱「AR Foundation 適用的 ARCore 擴充功能入門指南」一文,瞭解安裝和設定步驟。

使用 ARRaycastManager 設定新工作階段

只要使用 AR Foundation 套件,即可立即放置 (永久性光線投射)。請按照下列步驟設定場景。

AR Foundation 4.x

  1. 新增預先定義的遊戲物件 AR Session OriginAR Session

  2. AR Raycast Manager 元件新增至 AR Session Origin 遊戲物件。

如果 Raycast 預設結構體非空值,ARRaycastManager 會將預設結構體例項化,並自動將其姿勢與 ARRaycast 的姿勢同步。

AR Foundation 5.x

  1. 新增預先定義的遊戲物件 XR OriginAR Session

  2. AR Raycast Manager 元件新增至 XR Origin 遊戲物件。

如果 Raycast 預設結構體不為空值,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