前回、ARKitで認識した平面に3Dモデルを配置しました。
今回は、配置した3Dモデルをタップする事で消したり、また配置したりと出し入れしてみます。
SCNSceneRendererのhitTestを使う
前回の記事で、3Dモデルを配置するARKitで認識した平面を検知する際にARSCNViewのhitTestメソッドを利用しました。
今回は平面自体でなく、平面上に置いた3Dモデルノードをタップして検知したいので、SCNSceneRendererのhitTestを利用します。
名前が同じなのでちょっとややこしいですね。
hit Test(_: options:)
SCNSceneRendererのhitTestについては下記の通りです。
1 2 | func hitTest(_ point: CGPoint, options: [SCNHitTestOption : Any]? = nil) -> [SCNHitTestResult] |
- パラメータ
- 第1引数でCGPointで場所を指定
- 第2引数はSCNHitTestOptionでヒットテストオプションを指定する
オプションの種類は公式documentsを参照
https://developer.apple.com/documentation/scenekit/scnhittestoption
※ARSCNViewは、SCNViewを継承しているのでSCNSceneRendererプロトコルのhitTestも利用可となる様です。
実行!
ARSCNView、SCNSceneRendererのhitTestを使いわける事で、タップした箇所に3Dモデルのボトルがなければ配置、ボトルがあれば削除するデモができました。