Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当相机沿x轴移动时,如何限制SCNNode移动?_Ios_Swift_Arkit_Scnnode - Fatal编程技术网

Ios 当相机沿x轴移动时,如何限制SCNNode移动?

Ios 当相机沿x轴移动时,如何限制SCNNode移动?,ios,swift,arkit,scnnode,Ios,Swift,Arkit,Scnnode,我正在使用ARKit开发一个简单的应用程序,用户可以点击屏幕并在给定位置放置一个节点(SCNNode)。我希望用户能够将节点放置在原地,无论摄影机在哪里,这样当他们平移回放置节点的位置时,节点仍然在那里 我已经实现了点击功能,但我注意到当我沿x轴实际移动设备时,放置的节点也会随之移动。我尝试将节点锚定到根节点以外的其他节点,但没有按预期工作。我试图查找有关如何放置根节点的文档,以及它是否是基于摄影机计算的,这可以解释为什么节点会随摄影机一起移动,但也没有运气 下面是放置节点的代码。节点位置使用s

我正在使用ARKit开发一个简单的应用程序,用户可以点击屏幕并在给定位置放置一个节点(SCNNode)。我希望用户能够将节点放置在原地,无论摄影机在哪里,这样当他们平移回放置节点的位置时,节点仍然在那里

我已经实现了点击功能,但我注意到当我沿x轴实际移动设备时,放置的节点也会随之移动。我尝试将节点锚定到根节点以外的其他节点,但没有按预期工作。我试图查找有关如何放置根节点的文档,以及它是否是基于摄影机计算的,这可以解释为什么节点会随摄影机一起移动,但也没有运气

下面是放置节点的代码。节点位置使用scenePoint放置,scenePoint是使用从触摸位置到场景的投影


我认为这与我将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)
   }
}