前回、ARKitで認識した平面に3Dモデルを配置しました。

今回は、配置した3Dモデルをタップする事で消したり、また配置したりと出し入れしてみます。

SCNSceneRendererのhitTestを使う

前回の記事で、3Dモデルを配置するARKitで認識した平面を検知する際にARSCNViewのhitTestメソッドを利用しました。
今回は平面自体でなく、平面上に置いた3Dモデルノードをタップして検知したいので、SCNSceneRendererのhitTestを利用します。
 
名前が同じなのでちょっとややこしいですね。

hitTest(_:options:)

SCNSceneRendererのhitTestについては下記の通りです。

  • パラメータ
    • 第1引数でCGPointで場所を指定
    • 第2引数はSCNHitTestOptionでヒットテストオプションを指定する

 オプションの種類は公式documentsを参照
https://developer.apple.com/documentation/scenekit/scnhittestoption

※ARSCNViewは、SCNViewを継承しているのでSCNSceneRendererプロトコルのhitTestも利用可となる様です。

実行!

ARSCNView、SCNSceneRendererのhitTestを使いわける事で、タップした箇所に3Dモデルのボトルがなければ配置、ボトルがあれば削除するデモができました。