メインコンテンツまでスキップ
バージョン: 1.0.1

ヒットテスト

このサンプルでは、​​現実世界にある点や平面に対してヒットテストを行う方法を紹介します。

レイキャストによるヒットテストの基本情報とAR Foundationのコンポーネントの機能については、UnityのドキュメントAR Raycast Subsystemを参照してください。ドキュメント全体では、レイキャストヒットテストという用語が同じ意味で使用されています。

機能の有効化

この機能を使用するには、以下のOpenXRのプロジェクト設定でHit Testingにチェックする必要があります。
Project Settings > XR Plug-in Management > OpenXR (Androidタブ) alt text
ヒットテストは、他の機能(平面検出空間メッシュなど)を有効化する必要はなく単体で動作出来ます。

サンプルのインポート

まだサンプルをインポートしていない場合は、以下の手順でインポートすることができます。

  1. 基本パッケージのインポート
  2. 基本サンプルのインポート

サンプルシーンは以下の場所に存在します。
Assets/Samples/Snapdragon Spaces/1.X.X/Core Samples/Scenes/Hit Testing Sample/Hit Testing Sample.unity

サンプルの仕組み

AR Raycast ManagerXR Originゲームオブジェクトに追加すると、レイキャストのサブシステムが有効になります。利用可能なPlane Managerがない場合、Hit Testing機能がヒットテストのための基礎を作ります。

後でPlane Managerが生成される場合、基礎となる平面検出のサブシステムはそのマネージャー用に調整され、ヒットトラッキングは異なる動作をするかもしれません(例えば、結果はPlane Managerに設定されたプレーンフィルタに依存します)。

ヒットテストを使い最適な結果を得るには、Plane Managerのすべてのフィルターを有効にしてください。別のPlane Managerを使用しない場合、ヒットテスト機能が自動的にこれを処理し、最良の結果が得られます。

AR Raycast Managerのコンポーネントには、平面との交差に成功したときにスポーンするプレハブを定義するフィールドがあります。この機能はHit Testing Sample Controllerのコンポーネントに実装されているため、このサンプルではプレハブは空欄のままです。

レイキャストマネージャのレイキャスト関数は、レイがプレーンにヒットしたかどうかに応じてbool値を返します。ヒットした結果はARRaycastHitリストに追加され、距離の昇順でソートされます。

    public void Update() {
CastRay();
_activeIndicator.transform.position = _desiredPosition;
}

private void CastRay() {
Ray ray = new Ray(_cameraTransform.position, _cameraTransform.forward);

List<ARRaycastHit> hitResults = new List<ARRaycastHit>();
if (_raycastManager.Raycast(ray, hitResults)) {
_desiredPosition = hitResults[0].pose.position;
...
}
else {
...
}
}

サンプルシーンには、視線を追うデフォルトの赤色のギズモのインジケーターがあります。
毎フレーム、頭部の原点から視線の方向にレイキャストが作成されます。レイキャストが平面に当たると、インジケータのギズモの色が変わり、当たった位置に移動します。何も当たらなければ、ギズモの色は変わりません。