- Home /
[SOLVED] How to add acceleration and sway to a rotational velocity
SOLUTION
First declare 4 variables, all set to zero at start of game:
max velocity - the maximum velocity the object should be rotating at in order to be able to stop in time at the target rotation (uses is kinematic equation to find this)
target rotation - the target rotation the object is aiming for
target velocity - the target velocity the velocity should move towards, with the angle of the quaternion clamped between the minimum of either the base turn speed of the object or the maximum velocity declared above (this is how the acceleration works, by moving the current velocity towards the target velocity)
velocity - rotate this towards the target velocity by the acceleration amount
Then doing this: Rotate the object's rotation by the velocity.
ORIGINAL QUESTION
I am working on making a plane game. The plane is controlled by rotating the plane's transform.forward towards the camera's transform.forward. This is accomplished via the following code:
transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.FromToRotation(transform.forward, camera.forward) * transform.rotation, speed);
This works fine for what it is, but it needs some work. It linearly translates the plane's rotation towards the target rotation. However, I want the rotation to not translate linearly, but to have a little bit of sway and acceleration when changing the direction it is turning. So if the plane is not turning, and suddenly its target direction changes, it does not start turning immediately, but instead slowly starts turning towards the target direction, then picks up speed to its maximum rotational velocity.
Euler angles are a pain to work with, so preferably I would like to accomplish this using quaternions.
This won't be quite what you are looking for, but look up Quaternion.Lerp and Quaternion.Slerp. $$anonymous$$aybe you could fiddle around with them to make realistic acceleration.
Your answer
