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