Ios 当相机沿x轴移动时,如何限制SCNNode移动?
我正在使用ARKit开发一个简单的应用程序,用户可以点击屏幕并在给定位置放置一个节点(SCNNode)。我希望用户能够将节点放置在原地,无论摄影机在哪里,这样当他们平移回放置节点的位置时,节点仍然在那里 我已经实现了点击功能,但我注意到当我沿x轴实际移动设备时,放置的节点也会随之移动。我尝试将节点锚定到根节点以外的其他节点,但没有按预期工作。我试图查找有关如何放置根节点的文档,以及它是否是基于摄影机计算的,这可以解释为什么节点会随摄影机一起移动,但也没有运气 下面是放置节点的代码。节点位置使用scenePoint放置,scenePoint是使用从触摸位置到场景的投影Ios 当相机沿x轴移动时,如何限制SCNNode移动?,ios,swift,arkit,scnnode,Ios,Swift,Arkit,Scnnode,我正在使用ARKit开发一个简单的应用程序,用户可以点击屏幕并在给定位置放置一个节点(SCNNode)。我希望用户能够将节点放置在原地,无论摄影机在哪里,这样当他们平移回放置节点的位置时,节点仍然在那里 我已经实现了点击功能,但我注意到当我沿x轴实际移动设备时,放置的节点也会随之移动。我尝试将节点锚定到根节点以外的其他节点,但没有按预期工作。我试图查找有关如何放置根节点的文档,以及它是否是基于摄影机计算的,这可以解释为什么节点会随摄影机一起移动,但也没有运气 下面是放置节点的代码。节点位置使用s
我认为这与我将nodeImg节点作为子节点添加到rootNode这一事实有关,但我不确定还要将其锚定到什么位置。点击时,您需要设置节点的“世界位置”,而不仅仅是“位置” 检查此链接: 假设您已将sceneView.allowsCameraControl设置为false
@objc func handleTapGesture(withGestureRecognizer recognizer: UITapGestureRecognizer) {
let location: CGPoint = recognizer.location(in: self.sceneView)
let hits = self.sceneView.hitTest(location, options: nil)
if let tappednode = hits.first?.node {
nodeImg.worldPosition = tappednode.worldPosition
self.sceneView.scene.rootNode.addChildNode(nodeImg)
}
}
@objc func handleTapGesture(withGestureRecognizer recognizer: UITapGestureRecognizer) {
let location: CGPoint = recognizer.location(in: self.sceneView)
let hits = self.sceneView.hitTest(location, options: nil)
if let tappednode = hits.first?.node {
nodeImg.worldPosition = tappednode.worldPosition
self.sceneView.scene.rootNode.addChildNode(nodeImg)
}
}