独自のアプリで 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
事前定義されたゲーム オブジェクト AR Session Origin と AR Session を追加します。
AR Raycast Manager コンポーネントを AR Session Origin ゲーム オブジェクトに追加します。
Raycast Prefab が null でない場合、ARRaycastManager
はプレハブをインスタンス化し、そのポーズを自動的に ARRaycast
のポーズと同期します。
AR Foundation 5.x
事前定義のゲーム オブジェクト XR Origin と AR Session を追加します。
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
から始まり、ARCore が正確な 3D ポーズを取得すると Tracking
に移行します。トラッキング ステータスが Tracking
になると、Limited
に戻ることはありません。