What is the most efficient way to rotate an object?

Let’s say I have an object with it’s rotation center right on the end (see picture)

[38542-screen+shot+2015-01-10+at+19.52.08.png|38542]

When I rotate it 90 degrees, it will obviously rotate 90 degrees clockwise, but when I set the rotation to 270 degrees, it will go 270 degrees clockwise.
How can I make it so that whenever the rotation exceeds 180 degrees, the object will rotate counter clockwise instead of clock wise, so that wen I put in a rotation of 270 degrees, instead of going 270 degrees clockwise, it will go 90 degrees counter clockwise.

Thank you very much!!!

A Unity trick is to just specify the final angle, and use one of Quaternion RotateTowards or Lerp/Slerp (which homer3 suggests.) RotateTowards is the simplest (you give the actual amount of degrees to rotate this frame, ex: 90*Time.deltaTime to go a quarter-turn per second,) unless you’ve already used Lerp lots for movement.

They always take the best 3D path. Sometimes that can surprise you, as they find a better way to flip than the one you really wanted. But if everything is 2D, they work fine.

If you want them to go 180 one way, and they want the other, or you want a 181+ degree rotation, you can fool them by making a midpoint (rotate to this 90 degrees, now this 91 degrees more.)


The other problem is purely coding. Any wrong spins are because you programmed it wrong. If you have your own rotation number, then of course moving it from 0 to 270 is clockwise. So don’t. Move it from 0 to -90 or from 360 to 270, or gradually add -90. The Mathf library has some helpful functions: MoveTowardsAngle and DeltaAngle.

A trick with moving your own angles is not to read from rotation.eulerAngle. It can “randomly” add or subtract 360, and in 3D stuff, can even flip +/-180. Just always keep your personal float spin; variable, and use that to set rotation=Quaternion,Euler(0,spin,0);

Generally, the Quaternion shortest-path is fine for when it’s really just a pretty animation. The more complicated “spin your own variable” is needed when the rotation direction means something (like a clock face where you want to show time going forwards or backwards,) or need to specify things like 2.5 spins.

Rotations are mathematical operations. Added 2 + 3 isn’t going to me any faster than adding 6 + 2.

Only localEulerAngles to read and set the angles to absolute values. Don’t increment them, as it will fail when the angle exceeds 360 degrees. Use Transform.Rotate instead.

So it means Transform.Rotate is most efficient way to rotate object. you can also use Space.Self or Space.World according to the requirement.