# Animate rotating objects past 180 or -180 via code

Hello there. I am making a game where you can rotate a block. I do the “animation” by using coroutines with Quaternion.Lerp. As long as i am in between 180 and -180 it looks all good. But when i have a rotation of -180 and want to rotate -90 degrees, the lerp function does a backflip because it wants to go to +90. Any ideas?

I tried to check beforehand in which direction i want to rotate and then do for example:

`````` if (cubeRotator.transform.eulerAngles.x == -180)
{
cubeRotator.transform.eulerAngles = new Vector3(
-cubeRotator.transform.eulerAngles.x,
cubeRotator.transform.eulerAngles.y,
cubeRotator.transform.eulerAngles.z);
}
``````

The coroutine looks something like this:

``````    IEnumerator HandleFlipping(Vector3 direction, float duration, Vector3 endPos)
{
Quaternion targetRotation = Quaternion.Euler(targetFlip + cubeRotator.transform.rotation.eulerAngles);

float time = 0;
while (time < duration)
{
cubeRotator.transform.rotation = Quaternion.Lerp(cubeRotator.transform.rotation, targetRotation, time / duration);
time += Time.deltaTime;
yield return null;
}
``````

Also quick question, is transform.eulerAngles and transform.rotation.eulerAngles the same?

Just a hunch:
`Quaternion targetRotation = Quaternion.Euler(targetFlip + cubeRotator.transform.rotation.eulerAngles);`

Don't go through euler angles. You want targetFlip to be a quaternion so that you can do:
`var targetRotation = targetFlip * cubeRotator.transform.rotation;`

Note that multiplication is addition for Quaternions, and the order of multiplication actually matters.

1 Like