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

詳しくは、 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 をインストールして構成していることを前提としています。そうでない場合は、以下をご覧ください。 ARCore 拡張機能の AR Foundation スタートガイド をご覧ください。

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

オブジェクトを配置する

新しい 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