AR Foundation のインスタント プレースメント デベロッパー ガイド

独自のアプリで Instant Placement 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 が null でない場合、ARRaycastManager はプレハブをインスタンス化し、そのポーズを ARRaycast のポーズと自動的に同期します。

AR Foundation 5.x

  1. 事前定義されたゲーム オブジェクト XR OriginAR Session を追加します。

  2. AR Raycast Manager コンポーネントを XR Origin ゲーム オブジェクトに追加します。

Raycast Prefab が null でない場合、ARRaycastManager はプレハブをインスタンス化し、そのポーズを ARRaycast のポーズと自動的に同期します。

AR Foundation 6.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.trackingStateTracking になります。それ以外の場合は、Limited で始まり、ARCore が正確な 3D ポーズを取得すると Tracking に移行します。トラッキング状態が Tracking になると、Limited に戻ることはありません。