在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) {
}
}
此代码导致移动对象但它们不遵循放置它们的平面的边界。
现在代码中没有任何边界限制,我如何添加这些限制因此如果用户将立方体移动到平面的边缘,它将不会比这更进一步。