I have a player that shoots a rocket. If the rocket has a target, I use a quaternion slerp to make it home in on that target. Free firing the rocket goes directly forwards as expected. Setting a tracking_speed of 1 homes directly towards the target as expected. But for some reason if I set tracking_speed to less than 1, the rocket's initial direction becomes (0 0, 1) no matter where the ship is pointing and then proceeds to rotate towards the target. Code below.

var transformed_rotation:Transform = global_transform.looking_at(target.global_transform.origin, Vector3.UP)
var new_rotation:Quat = Quat(global_transform.basis).slerp(transformed_rotation.basis, tracking_speed)

set_global_transform(Transform(new_rotation, global_transform.origin))

The issue was that in Quat(global_transform.basis) the basis was not normalized first.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.