- Home /
How to Rotate a CUBE by 90 Degrees when a key is pressed
Hello,
I would like, in a C# script, to rotate a cube by exactly 90 degrees when a specific key is pressed. The code below works, but only rotates the cube by a small amount each time the RIGHT ARROW key is pressed. Is there some functionality that would allow me to rotate a specific number of degrees at once? Euler Angles perhaps? Thanks in advance!
void Update () {
if(Input.GetKeyDown (KeyCode.RightArrow))
{
transform.RotateAround(Vector3.zero, Vector3.up, 60 * Time.deltaTime);
}
}
Time.deltaTime returns the amount of time (in seconds) since the last frame, so if you are running your game at a constant 60FPS it would return 0.0166. What you would want to do is change that 60 (in your code) to 90 (to rotate it 90 degrees and not 60) and run that every frame after you have pressed the button until you have rotated 90 degrees. At least, that's what I would do.
Answer by KdRWaylander · Mar 31, 2015 at 10:21 AM
Hi :)
I think you can do it with this one: http://docs.unity3d.com/ScriptReference/Vector3.Lerp.html
Ah I see...in the first solution the rotation would have been almost instantaneous, so the naked eye would not have picked it up?
In any event the Lerp approach did indeed give the desired results after a little playing around.
Thank again to both responders. Great community!
Answer by fafase · Apr 01, 2015 at 03:54 AM
There are overloads for the Rotate method:
transform.Rotate(0,90,0,Space.Self);
Answer by digzelot · Apr 01, 2015 at 03:50 AM
Use Quaternion.lerp
http://docs.unity3d.com/ScriptReference/Quaternion.Lerp.html
instead of using time.deltaTime as the time parameter, make it a float value that goes from 0 - 1
At 0 your rotation will be 'from', at 1 your rotation will be 'to'
so your time parameter could be something like
float rotationTime = 0f;
if(rotate == true)
rotationTime += Time.deltaTime * 0.2f;
if(rotationTime >= 1f){
rotate = false;
rotationTime = 0f;
}