Я пытаюсь, чтобы узел Sphere следил за движением пальца по экрану только по его оси x, не влияя на значения y или z сферы. Я не уверен, должен ли я применять силу к физическому телу или перемещать его с помощью SCNAction. Сфера будет подпрыгивать на узле куба, который занимает ширину экрана. Моя самая большая проблема на данный момент состоит в том, чтобы выяснить, что нужно поместить в функцию пагестуры. Вот пример того, что я пытаюсь воспроизвести, когда пользователь проводит пальцем по экрану, а шар отражает его местоположение.
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for t in touches {
let touchLocation = t.location(in: self.view)
let touchCoordinatesX = (touchLocation.x - self.scnView.frame.width / 2)
ballNode.position.x = Float(touchCoordinatesX/75)
}
}
Приведенный выше код работает в некоторой степени, когда я провожу пальцем по экрану, y-позиция искажается и очень быстро отстает и опускается, даже если мой код никогда не редактирует значение y шара. Каждый раз, когда я перетаскиваю экран, положение y шара сбрасывается до его первоначального значения, когда он был добавлен в корневой узел сцены.
Исходя из вашего ответа, это то, что я использовал и делает именно то, что мне нужно.
@objc func handlePan(recognizer: UIPanGestureRecognizer)
{
currentLocation = recognizer.location(in: self.view)
let touchCoordinatesX = (currentLocation.x - self.scnView.frame.width / 2)
if recognizer.state == .changed
{
ballNode.position.x = Float(touchCoordinatesX/75)
ballNode.position.y = ballNode.presentation.position.y
}
}