我目前正在尝试使用平移手势识别器来移动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
,因此我想知道它是否是位置/坐标这些都是问题所在。
答案 0 :(得分:3)
points
此代码在X
的视图中返回带有手势位置的CGPoint(可能是像素)。但是SCNNode位置(在现实世界中)是以米为单位的位置。因此,当您在SCNVector中为unprojectPoint
位置添加一个点时,您实际上为此添加了一个米。
要将屏幕点转换为3D世界坐标,请使用ARSCNView
的{{1}}方法。您可能需要保存先前的手势位置才能找到位置更改。