我正在使用ARKit开发基于AR的应用程序。我使用https://developer.apple.com/documentation/arkit/handling_3d_interaction_and_ui_controls_in_augmented_reality作为基础。使用此功能,我可以移动或旋转整个虚拟对象。
现在虚拟对象中有很多子节点。我想用用户的手指拖动/移动任何子节点,而不管轴是什么。子SCNode可能处于地面或浮动状态。我想移动用户手指所在的任何地方,无论轴是什么,或者与子节点的欧拉角无关。这甚至可能吗?
我按照下面的链接,但它只是沿着一个特定的轴移动。
ARKit - Drag a node along a specific axis (not on a plane)
Dragging SCNNode in ARKit Using SceneKit
我尝试使用下面的代码并没有任何帮助,
let tapPoint: CGPoint = gesture.location(in: sceneView)
let result = sceneView.hitTest(tapPoint, options: nil)
if result.count == 0 {
return
}
let scnHitResult: SCNHitTestResult? = result.first
movedObject = scnHitResult?.node //.parent?.parent
let hitResults = self.sceneView.hitTest(tapPoint, types: .existingPlane)
if !hitResults.isEmpty{
guard let hitResult = hitResults.last else { return }
movedObject?.position = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)
}