2017-07-16 7 views
1

私はviewDidLoadパンジェスチャ認識機能を使用してARSCNViewでノードを移動するにはどうすればよいですか?

let scene = SCNScene(named: "funModel")! 
myNode = scene.rootNode.childNode(withName: "blah")! 
myNode.position = SCNVector3Make(0, 0, -1) 
sceneView.scene = scene 
let pan = UIPanGestureRecognizer(target: self, action: #selector(panGesture(recognizer:))) 
view.addGestureRecognizer(pan) 

で、次のコードと、その後another SO answerからpanGestureに次のコードを持っているが、それは働いていません。ノードはちょうど0、0、0のようになります。私はちょうど画面の周りにノードをドラッグできるようにしたい。

let projectedOrigin = sceneView.projectPoint(SCNVector3Zero) 
let vp = recognizer.location(in: sceneView) 
let vpWithZ = SCNVector3(x: Float(vp.x), y: Float(vp.y), z: Float(projectedOrigin.z)) 
let worldPoint = sceneView.unprojectPoint(vpWithZ) 
myNode.position = worldPoint 
+0

上記の他の答えは、カメラに垂直な仮想平面に沿ってノードを移動させることに特有であることに留意されたい。それがあなたの意図でないなら、あなたは望んでいない結果を得るでしょう。 – rickster

答えて

0

あなた(あなたのUIPanGestureRecognizer機能に)UIPanGestureRecognizer場所からhittestポイントを取得するための最初の必要性のような:

let point = pan.location(in: scene) 
let result = scene.hitTest(point, types: .featurePoint) 
let resultPoint = result.first 

今、あなたの新しい世界のポイントは次のとおりです。

let vpWithZ = SCNVector3(x: Float(resultPoint.worldTransform.columns.3.x), y: Float(resultPoint.worldTransform.columns.3.y), z: Float(projectedOrigin.z)) 

がそれを願っています助けてください。

関連する問題