2017-08-31 25 views
2

現在、パンジェスチャー認識機能を使用してシーンキットのノードを移動しようとしています。私はx軸に沿って動かすだけですが、私のジェスチャーはオブジェクトをもっと早く/速く動かしますが、小さなジェスチャーを使用してもそれはすべきです。私は私が間違ってここにやっていない、100%確信しているが、ここで私のジェスチャー認識のためのコードは次のとおりです。私は、オブジェクトがそれだけで信じられないほどの速度と距離で発表されています移動されていると言ったようScenekitパンジェスチャー移動ノードが速すぎる

@objc func handlePan(pan:UIPanGestureRecognizer) { 
    if pan.state == .changed { 
     let translation = pan.translation(in: pan.view!) 

     node!.position = SCNVector3(x:node!.position.x + Float(translation.x), y:node!.position.y, z:node!.position.z) 

     pan.setTranslation(CGPoint.zero, in: pan.view!) 
    } 
} 

。その効果はほぼ累積的に見えます。

私は私が私のパンジェスチャー認識の翻訳をリセットしなかった場合は、こうであると考えていたが、私はここに

pan.setTranslation(CGPoint.zero, in: pan.view!) 

私は実際にARKitでこの仕事を取得しようとしていることをやっていますシナリオですが、ノードを正しく動かすためにすべてを取り除きましたが、まだ問題があります。

panはARSCNViewに追加されますが、私が操作しようとしているノードはARSCNView.scene.rootNodeにchildNodeとして追加されていますので、問題の位置/座標であるか疑問に思っています。

答えて

3
let translation = pan.translation(in: pan.view!) 

このコードは、(ピクセルである可能性がある)pointsのビューにおけるジェスチャーの位置とするCGPointを返します。しかし、SCNNodeの位置(現実の世界)はメートル単位の位置です。したがって、SCNVectorにXポジションの1つのポイントを追加するときは、実際には1メートル追加します。

スクリーンポイントを3Dワールド座標に変換するには、メソッドをARSCNViewとします。ポジションの変更を見つけるには、おそらく以前のジェスチャーの位置を保存する必要があります。

+0

ああ、どうやってそこに変換を行うのですか?私は主にSpriteKitで作業しましたが、このコードをどこから変換しようとしているのですか? – TommyBs

+0

@TommyBs更新された回答を参照 –

+0

'unprojectPoint'の' SCNVector'の 'Z'は深さです。 。 –

関連する問題