我正在尝试旋转我的对象(SCNNode)以面对它正在移动的点.我只在x轴和y轴上移动,到目前为止我尝试过:
// Action to move node let action1 = SCNAction.moveTo(SCNVector3(x: 4.0,y: 0.0,z: 6.0),duration: 3) // Get the tan angle: let angle = CGFloat(atan2(z,x)) if angle - prevIoUsAngle > Pi { playerAngle += 2 * Pi } else if prevIoUsAngle - angle > Pi { playerAngle -= 2 * Pi } prevIoUsAngle = angle playerAngle = angle * RotationBlendFactor + playerAngle * (1 - RotationBlendFactor) let rot = playerAngle - 90 * DegreesToRadians flyNode.rotation = SCNVector4(x: 0,y: 1,z: 0,w: Float(rot))
它适用于某些目标点,但不适用于所有目标点.
我也尝试添加约束数组SCNLookAtConstraint,它完美地旋转我的节点,但它停止我移动到动画:
let targerNode = SCNNode() targerNode.position = SCNVector3(x: -4.0,z: -2.0) let con = SCNLookAtConstraint(target: targerNode) flyNode.constraints = [con] let action1 = SCNAction.moveTo(SCNVector3(x: 4.0,z: -2.0),duration: 3)
你能帮帮我解决这个问题吗?
解决方法
最简单的解决方案(尽管可能不是最优雅的)是将moveTo SCNAction应用于节点,并将SCNLookAtConstraint应用于该节点的子节点.这应该使两者都可以无冲突地运作.