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

SceneKit – pan gesture is moving node too quickly

我目前正在尝试使用平移手势识别器在 SceneKit 中移动节点。我只是沿着 X 轴移动它,但是我的手势移动对象很多 further/faster 那么即使只使用小手势也应该如此。我不是 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 而我试图操作的节点被作为子节点添加到 ARSCNView.scene.rootNode 所以我想知道它是否是其中的 positions/coordinates问题。

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

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

要将屏幕点转换为 3D 世界坐标,请使用 ARSCNViewunprojectPoint 方法。您可能需要保存之前的手势位置才能找到位置变化。