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

瞭解如何在自己的應用程式中使用即時放置 API持續性光線投射

必要條件

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

概念名稱

AR Foundation 和 ARCore SDK for Unity 的某些概念和方法名稱可能不同。下表列出這些資訊方便參考。

AR Foundation ARCore SDK for Unity
持續性光線投射 即時放置
ARRaycastManager.AddRaycast(Vector2, float) Frame.RaycastInstantPlacement(float, float, float, out TrackableHit)
ARRaycast TrackableHit
(無對應項目) InstantPlacementPoint
ARRaycast.trackingState InstantPlacementPointTrackingMethod

必要條件

本指南假設您已安裝及設定 Unity。如果沒有,請參閱「開始使用 AR Foundation 的 ARCore Extensions」,瞭解安裝和設定步驟。

使用 ARRaycastManager 設定新工作階段

AR Foundation 套件提供立即可用的即時放置功能 (持續性光線投射)。請按照下列步驟設定場景。

AR Foundation 4.x

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

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

當 Raycast Prefab 不是空值時,ARRaycastManager 會例項化預先製作的物件,並自動將其姿態與 ARRaycast 的姿態同步。

AR Foundation 5.x

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

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

當 Raycast Prefab 不是空值時,ARRaycastManager 會例項化預先製作的物件,並自動將其姿態與 ARRaycast 的姿態同步。

AR Foundation 6.x

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

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

當 Raycast Prefab 不是空值時,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