第2章 ARKit 堤 修一/@shu223
上のコードでは、画面のタップ位置からヒットテストを実行し、ヒットしたノードに合致する仮想オブジェクトに反応させる、という処理を行っています。
図2.11 SceneKitノードのインタラクション
■特徴点に対するヒットテスト
ARSCNViewのhitTest(_:types:)の第2引数に指定できる「ヒットテスト結果のタイプ」にfeaturePointを指定すると、特徴点へのヒットテストが行われるようになります。
let results = sceneView.hitTest(pos, types: [.featurePoint])
結果の型はARHitTestResultですが、特徴点に対するヒットテスト結果の場合anchorプロパティに値が入りません。existingPlaneUsingExtentやexistingPlaneとは、その点が異なります。
また、次のようにヒットテスト実行時に複数の結果タイプを指定した場合は、
let results = sceneView.hitTest(pos, types: [.featurePoint, .existingPlane])
ARHitTestResultのtypeプロパティを見て「どのタイプのオブジェクトにヒットした結果か」(平面なのか特徴点なのか)を判別できます。
// 結果のタイプの判定 switch result.type { case .featurePoint: // 特徴点へのヒット print(result.anchor as Any) // 特徴点にはアンカーはないのでnilになる case .existingPlane: // 検出済み平面へのヒット print(result.anchor as Any) // ヒットした平面のアンカーが得られる default: break }