第2章 ARKit 堤 修一/@shu223


 上のコードでは、画面のタップ位置からヒットテストを実行し、ヒットしたノードに合致する仮想オブジェクトに反応させる、という処理を行っています。

図2.11 SceneKitノードのインタラクション

特徴点に対するヒットテスト

 ARSCNViewhitTest(_:types:)の第2引数に指定できる「ヒットテスト結果のタイプ」にfeaturePointを指定すると、特徴点へのヒットテストが行われるようになります。

let results = sceneView.hitTest(pos, types: [.featurePoint])

 結果の型はARHitTestResultですが、特徴点に対するヒットテスト結果の場合anchorプロパティに値が入りませんexistingPlaneUsingExtentexistingPlaneとは、その点が異なります。

 また、次のようにヒットテスト実行時に複数の結果タイプを指定した場合は、

let results = sceneView.hitTest(pos, types: [.featurePoint, .existingPlane])

ARHitTestResulttypeプロパティを見て「どのタイプのオブジェクトにヒットした結果か」(平面なのか特徴点なのか)を判別できます。

// 結果のタイプの判定
switch result.type {
case .featurePoint:
    // 特徴点へのヒット
    print(result.anchor as Any)    // 特徴点にはアンカーはないのでnilになる
case .existingPlane:
    // 検出済み平面へのヒット
    print(result.anchor as Any)    // ヒットした平面のアンカーが得られる
default:
    break
}

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川 克己,所 友太,永野 哲久,
  • 製本版,電子版
  • 続きを読む