在ARKit中的水平面上移动SCNNode

时间:2017-08-17 08:47:17

标签: scenekit move augmented-reality arkit scnnode

在ARKit中,检测到水平面时。我添加一个像结构(SCNNode)的平面,其高度非常小,所以它看起来像地板。然后我在那个平面上添加更多像立方体等对象。现在我希望用户只能在该平面上移动立方体,它应该看起来像是只在那个表面上推动对象。多维数据集节点也已作为子节点添加到主场景节点。

我添加了一个像这样的平移手势:

let globalPanRecognizer: UIPanGestureRecognizer = UIPanGestureRecognizer(target: self,
                                                                         action: #selector(dragObject(sender:)))
self.sceneView.addGestureRecognizer(globalPanRecognizer)

这就是我在dragObject函数中所做的:

@objc func dragObject(sender: UIPanGestureRecognizer) {

    if(movingNow) {
        let translation = sender.translation(in: self.sceneView)
        //let result : SCNVector3 = CGPointToSCNVector3(view: self.sceneView, depth: currentTouchLocationInPlane.z, point: translation)
        let result : SCNVector3 = SCNVector3Make(Float(translation.x), Float(tappedObjectNode.position.y),currentTouchLocationInPlane.z)
        tappedObjectNode.position = result
    } else {
        let hitResults = self.sceneView.hitTest(sender.location(in: self.sceneView), options: nil)
        if hitResults.count > 0 {
            //tappedObjectNode = (hitResults.last?.node)!
            tappedObjectNode = hitResults[0].node
            movingNow = true
        }
    }
    if(sender.state == UIGestureRecognizerState.ended) {
    }
}

此代码导致移动对象但它们不遵循放置它们的平面的边界。

现在代码中没有任何边界限制,我如何添加这些限制因此如果用户将立方体移动到平面的边缘,它将不会比这更进一步。

0 个答案:

没有答案