raycast(ヒットテスト)を実行して、シーン内の 3D オブジェクトの正しい配置を決定します。正しく配置することで、AR コンテンツが適切な(見かけ上の)サイズでレンダリングされます。
ヒット結果のタイプ
ヒットテストでは、次の表に示すように、4 種類のヒット結果が得られます。
ヒット結果のタイプ | 説明 | 向き | ユースケース | メソッド呼び出し |
---|---|---|---|---|
奥行き | シーン全体の深度情報を使用して、ポイントの正しい深度と向きを決定します。 | 3D サーフェスに垂直 | 仮想オブジェクトを任意のサーフェス(床や壁だけでなく)に配置する |
これを行うには、Depth を有効にする必要があります。ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.Depth)
|
飛行機 | 水平面または垂直面をヒットして、点の正しい深さと向きを決定します。 | 3D サーフェスに垂直 | 平面の完全なジオメトリを使用して、平面(床または壁)にオブジェクトを配置します。すぐに適切なスケールが必要。デプス ヒットテストのフォールバック |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.PlaneWithinPolygon)
|
特徴 | ユーザーがタップしたポイントの周囲の視覚的な特徴に基づいて、ポイントの正しい位置と向きを決定します。 | 3D サーフェスに垂直 | 任意の表面(床や壁以外)にオブジェクトを配置します。 |
ARRaycastManager.Raycast(Vector2 screenPoint, List<ARRaycastHit> hitResults, TrackableType trackableTypes TrackableType.FeaturePoint)
|
永続的なレイキャスト(インスタント プレースメント) | 画面スペースを使用してコンテンツを配置します。最初は、アプリが提供する推定深度を使用します。すぐに動作しますが、ARCore が実際のシーン ジオメトリを決定すると、ポーズと実際の深度が変化します。 | +Y は上向き(重力に逆らう方向) | 迅速な配置が重要で、初期の深度とスケールが不明な場合に、プレーンの完全なジオメトリを使用してプレーン(床または壁)にオブジェクトを配置します。 |
ARRaycastManager.AddRaycast(Vector2 screenPoint, float estimatedDistance)
|
標準のレイヤキャストを実行する
ARRaycastManager.Raycast(Vector2, List<ARRaycastHit>, TrackableType)
を呼び出してレイキャスト(ヒットテスト)を実行します。ARRaycastManager
はすべての TrackableType
をサポートしています。
var touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began)
return;
// Raycast against planes and feature points.
const TrackableType trackableTypes =
TrackableType.FeaturePoint |
TrackableType.PlaneWithinPolygon;
List<ARRaycastHit> hits = new List<ARRaycastHit>();
// Perform the raycast.
if (raycastManager.Raycast(touch.position, hits, trackableTypes))
{
// Raycast hits are sorted by distance, so the first one will be the closest hit.
var hit = hits[0];
// Do something with hit.
}
任意の光線と方向を使用してレイキャストを行う
通常、レイキャストはデバイスまたはデバイスのカメラからのレイとして扱われますが、Raycast(Ray, List<ARRaycastHit>, TrackableType)
を使用すると、画面空間の点ではなく、ワールド空間座標で任意のレイを使用してレイキャストを行うことができます。
ARRaycastHit
を使用してアンカーを作成する
レイキャストがヒットしたら、GameObject.AddComponent<ARAnchor>
を使用してアンカーを作成し、レイキャストがヒットした場所を入力として、アンカーを GameObject
にコンポーネントとして追加します。ARAnchor
コンポーネントはゲーム オブジェクトの Transform
を継続的に更新するため、ゲーム オブジェクトはヒット結果の基礎となる Trackable
にアタッチされたままになります。
永続的なレイキャスト(インスタント プレースメント)
永続レイキャストでは、画面の位置とサーフェスからの推定距離を入力として使用し、新しい ARRaycast
を作成してシーン内に AR コンテンツを配置します。ARCore では、これをインスタント プレースメントと呼びます。
ARRaycastManager.AddRaycast()
を呼び出して ARRaycast
を作成します。この ARRaycast
は、ARRaycastManager.RemoveRaycast()
を呼び出すか、ARRaycastManager
を無効にするまで自動的に更新され続けます。
最初は、ARRaycast
の距離は AddRaycast()
呼び出しで指定された距離になります。ARCore がローカル ジオメトリをマッピングして交差する平面を見つけると、距離が実際の距離に更新されます。距離の変化は、物体の見かけの「サイズ」や知覚されるスケールに影響する可能性があります。