ARKitでタップした座標を検出する方法

  • 10
    Like
  • 3
    Comment

ARKitでタップした座標を検出する方法

ARSCNView

ARを使う大前提のビュー。これがないと始まらないです。

storyboard上で紐付けを行ってください

class ViewController: UIViewController, ARSCNViewDelegate {
    @IBOutlet var sceneView: ARSCNView!

UITapGestureRecognizer

現実世界の座標には、SCNVector3を用いて取得を行います。

UITapGestureRecognizerでタップ判定を登録し、タップしたポイントを取得します。

@IBAction func tappedSceneView(_ sender: UITapGestureRecognizer) {
// sceneView上でタップした座標を検出
let tapPoint = sender.location(in: sceneView)
let results = sceneView.hitTest(tapPoint, types: .existingPlaneUsingExtent)
let hitPoint = results.first
// 現実世界の座標に変換
let point = SCNVector3.init(hitPoint.worldTransform.columns.3.x,
                          hitPoint.worldTransform.columns.3.y,
                          hitPoint.worldTransform.columns.3.z)

認識した平面に対して座標を検出できるようになります。

※3次元なので、奥行きがz軸になりますので注意してください。