[Swift][ARKit] UIPanGestureRecognizer で SCNNodeを回転させる

ITARKit, Swift

UIPanGestureRecognizer を使って、SCNNode を回転させてみました。

画面をタッチして、タッチした状態で、

指を上下に動かすと、x 軸方向に回転します。

指を左右に動かすと、y 軸方向に回転します。

@objc func panned(recognizer: UIPanGestureRecognizer) {
        switch recognizer.state {
        case .changed:
            guard let pannedView = recognizer.view as? ARSCNView else { return }
            let translation = recognizer.translation(in: pannedView)
            self.sceneView.scene.rootNode.enumerateChildNodes { (node, _) in
                if node.name == "robo" {
                    self.newAngleX = Float(translation.y) * (Float)(Double.pi)/180
                    self.newAngleX += self.currentAngleX
                    self.newAngleY = Float(translation.x) * (Float)(Double.pi)/180
                    self.newAngleY += self.currentAngleY
                    node.eulerAngles.x = self.newAngleX
                    node.eulerAngles.y = self.newAngleY
                }
            }

        case .ended:
            self.currentAngleX = self.newAngleX
            self.currentAngleY = self.newAngleY
        default:
            break
        }
    }

指でタッチした箇所からの移動距離に円周率をかけて、180で割ってます。

(割る値を大きくすると、指の移動距離に対する回転角度が小さくなります。)

このように実装すると、下記の動画のように回転します。

サンプルコード:
https://github.com/nobuhiroharada/ARKit-beginner/tree/master/ARKit-beginner/3-Gesture

スポンサーリンク

Posted by nobuhiro harada