SceneKit - 平移手势移动节点太快

时间:2017-08-31 11:05:58

标签: ios scenekit augmented-reality arkit

我目前正在尝试使用平移手势识别器来移动SceneKit中的节点。我只是沿着X轴移动它,但是我的手势会使对象移动得更远/更快,即使只使用小手势也是如此。我不是100%确定我在这里做错了什么,但这里是我手势识别器的代码:

@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场景中尝试这项工作,但是我已经将所有这些工作剥离,只是让节点正常移动但我仍然遇到问题。

将平移添加到ARSCNView,而我尝试操作的节点作为childNode添加到ARSCNView.scene.rootNode,因此我想知道它是否是位置/坐标这些都是问题所在。

1 个答案:

答案 0 :(得分:3)

points

此代码在X的视图中返回带有手势位置的CGPoint(可能是像素)。但是SCNNode位置(在现实世界中)是以米为单位的位置。因此,当您在SCNVector中为unprojectPoint位置添加一个点时,您实际上为此添加了一个米。

要将屏幕点转换为3D世界坐标,请使用ARSCNView的{​​{1}}方法。您可能需要保存先前的手势位置才能找到位置更改。