AR Raycast Manager コンポーネント
ARRaycastManager は、トラッカブルマネージャー の一種です。
AR Raycast Manager コンポーネント
レイキャスティング
レイキャスティング (ヒットテストとも呼ばれる) を使用すると、レイ (原点と方向で定義される) が トラッカブル と交差する場所を特定できます。レイキャストインターフェースは、Unity Physics モジュール内のものと似ていますが、AR (拡張現実) トラッカブルは必ずしも物理世界に存在する必要がないので、AR Foundation には個別のインターフェースが用意されています。
Raycast Manager には、以下の 2 つの目的があります。
- 1 つのレイキャストを実行する API を提供する。
- 永続化された ARRaycast を作成できるようにする。
ARRaycast
はトラッカブルの一種であり、削除するまで自動的に更新されます。概念上はフレームごとに同じレイキャストクエリを繰り返すことに似ていますが、この機能を直接サポートするプラットフォームでは、より良い結果が得られます。
1 つのレイキャスト
ARRaycastManager には、1 つのレイキャストを実行するレイキャスティングメソッドが 2 つあります。
1 つ目のメソッドには、画面上の二次元ピクセル位置が必要です。
public bool Raycast(
Vector2 screenPoint,
List<ARRaycastHit> hitResults,
TrackableType trackableTypes = TrackableType.AllTypes)
例えば、以下のようにタッチ位置を直接渡すことができます。
[SerializeField]
ARRaycastManager m_RaycastManager;
List<ARRaycastHit> m_Hits = new List<ARRaycastHit>();
void Update()
{
if (Input.touchCount == 0)
return;
if (m_RaycastManager.Raycast(Input.GetTouch(0).position, m_Hits))
{
// Only returns true if there is at least one hit
}
}
2 つ目のメソッドには、任意の レイ (位置と方向) が必要です。
public bool Raycast(
Ray ray,
List<ARRaycastHit> hitResults,
TrackableType trackableTypes = TrackableType.AllTypes)
以下の表は、その他のパラメーターをまとめたものです。
パラメーター | 説明 |
---|---|
hitResults |
どちらのメソッドの結果もこの List に格納されます。これは null 以外でなければなりません。同じ List オブジェクトを再利用することで、割り当て時のガベージコレクションを防止できます。 |
trackableTypeMask |
ヒットテストの対象とするトラッカブルのタイプ。これはフラグなので、例えば TrackableType.PlaneWithinPolygon | TrackableType.FeaturePoint など、複数のタイプでビット単位の OR 演算を行うことができます。 |
レイキャストのヒット対象の特定
レイキャストが何かにヒットした場合、hitResults
に ARRaycastHits の List
が入力されます。
hitType を使用して、レイキャストがどのようなものにヒットしたかを特定します。平面 などの トラッカブル にヒットした場合は、ARRaycastHit.trackable プロパティをそのタイプのトラッカブルに割り当てることができます。
void HandleRaycast(ARRaycastHit hit)
{
if (hit.trackable is ARPlane plane)
{
// Do something with 'plane':
Debug.Log($"Hit a plane with alignment {plane.alignment}");
}
else
{
// What type of thing did we hit?
Debug.Log($"Raycast hit a {hit.hitType}");
}
}
永続化されたレイキャスト
永続化されたレイキャストは、トラッカブル の一種です。各 ARRaycast は、削除するか ARRaycastManager を無効にするまで、自動更新が継続されます。
永続化されたレイキャストを追加または削除するには、スクリプトコードから ARRaycastManager コンポーネントの AddRaycast または RemoveRaycast を呼び出します。
永続化されたレイキャストは、スクリーンポイントから作成する必要があります。
public ARRaycast AddRaycast(Vector2 screenPoint, float estimatedDistance)
新しい ARRaycast を作成すると、AR Foundation によって AR Raycast コンポーネントを備えた新しいゲームオブジェクトが作成されます。必要に応じて Raycast Prefab フィールドに、ARRaycast ごとにインスタンス化されるプレハブを指定することもできます。そうすることで、ARRaycast ごとのデフォルトの動作を拡張できます。
サポート対象のトラッカブル
ARRaycastManager は、ほとんどの TrackableType に対するレイキャスティングをサポートしていますが、すべてのプラットフォームですべてのトラッカブルがサポートされているわけではありません。プラットフォームごとのサポート対象の TrackableType (トラッカブルのタイプ) のリストについては、以下を参照してください。
TrackableType | ARCore | ARKit |
---|---|---|
Depth |
✓ | |
Face |
||
FeaturePoint |
✓ | ✓ |
Image |
✓ | |
Planes |
✓ | ✓ |
PlaneEstimated |
✓ | ✓ |
PlaneWithinBounds |
✓ | ✓ |
PlaneWithinInfinity |
✓ | |
PlaneWithinPolygon |
✓ | ✓ |