Как перенести узел в ARSCNView с помощью распознавателя жесты? - ios


1

У меня есть следующий код в viewDidLoad

let scene = SCNScene(named: "funModel")!
myNode = scene.rootNode.childNode(withName: "blah")!
myNode.position = SCNVector3Make(0, 0, -1)
sceneView.scene = scene
let pan = UIPanGestureRecognizer(target: self, action: #selector(panGesture(recognizer:)))
view.addGestureRecognizer(pan)

а затем следующий код в panGesture из другого ответа SO, но он не работает. Узел просто переходит в 0, 0, 0, похоже. Я просто хочу, чтобы можно было перетащить узел вокруг экрана.

let projectedOrigin = sceneView.projectPoint(SCNVector3Zero)
let vp = recognizer.location(in: sceneView)
let vpWithZ = SCNVector3(x: Float(vp.x), y: Float(vp.y), z: Float(projectedOrigin.z))
let worldPoint = sceneView.unprojectPoint(vpWithZ)
myNode.position = worldPoint
Источник
  •  24
  •  1
  • 9 мар 2020 2020-03-09 10:35:22

1 ответ

1

Сначала вам нужно получить точку hittest из местоположения UIPanGestureRecognizer (в вашей функции UIPanGestureRecognizer), например:

let point = pan.location(in: scene)
let result = scene.hitTest(point, types: .featurePoint)
let resultPoint = result.first

Теперь ваш новый мир:

let vpWithZ = SCNVector3(x: Float(resultPoint.worldTransform.columns.3.x), y: Float(resultPoint.worldTransform.columns.3.y), z: Float(projectedOrigin.z))

Надеюсь, поможет.