Я работаю над приложением на основе AR, используя ARKit.Я использую https://developer.apple.com/documentation/arkit/handling_3d_interaction_and_ui_controls_in_augmented_reality в качестве базы для этого.Используя это, я могу перемещать или вращать весь Виртуальный объект.
Теперь в Виртуальном объекте много дочерних узлов.Я хочу перетащить / переместить любой дочерний узел пальцем пользователя независимо от оси.Дочерний SCNode может быть заземленным или плавающим.Я хочу переместить объект туда, куда направляется палец пользователя, независимо от оси или независимо от углов Эйлера дочернего узла.Это вообще возможно?
Я перешел по ссылкам ниже, но он просто движется вдоль определенной оси.
ARKit - перетащите узел вдоль определенной оси (не на плоскости)
Перетаскивание SCNNode в ARKit с помощью 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)
}