У меня есть SCNNode, по которому я хотел бы пройти по пути, состоящему из точек, представленных SCNVector3s. Однако вместо того, чтобы просто перемещаться от точки к точке, я хотел бы, чтобы она поворачивалась лицом в направлении каждой точки, к которой он движется. Я знаю, что установка SCNLookAtConstraint может помочь в этом, но я считаю, что это будет управлять только направлением, в котором обращена отрицательная ось z, но я хотел бы также иметь возможность управлять осью y, чтобы ее отрицательная ось y всегда обращалась к трассе. Надеюсь, я был достаточно ясен, но не стесняйтесь просить разъяснений. Спасибо!
Как повернуть SCNNode, чтобы следовать за линией
Ответы (1)
Сначала moveTo () - похоже, у вас есть правильная идея, просто сбросьте свой следующий ход в обработчике завершения. Я предполагаю, что вы делаете это вручную, поэтому установите ограничение lookAt, когда начнется следующий ход, и наведите его на цель. Я думаю, что это будет делать то, что вы хотите, но в зависимости от нескольких вещей, например, как быстро он движется, пролетаете ли вы через targetNode или над ним, определенные ситуации могут вызвать его «подпрыгивание». Если я правильно понимаю ваш вопрос по оси Y - lookAt столкнется с узлом и будет привязан к нему. Если вы находитесь на ровной поверхности, не думаю, что это будет проблемой.
func moveTo()
{
let vPanelName = moves[moveCount]
let vLaneNode = grid.gridPanels[vPanelName]!.laneNodes[lane]
let vAction = SCNAction.move(to: vLaneNode.presentation.position, duration: TimeInterval(data.getAttackSpeed(vGameType: gameType)))
node.runAction(vAction, completionHandler:
{
self.moveCount += 1
if(self.moveCount >= self.moves.count - 1)
{
self.killMe(vRealKill: false)
return
}
else
{
self.moveTo()
}
})
}
person
Voltan
schedule
18.04.2021
updatePositionAndOrientationOf
из этого ответа - person aheze   schedule 14.04.2021