Home > Enterprise >  How to rotate cube smoothly
How to rotate cube smoothly

Time:03-10

i am trying to rotate cube smoothly to 90 degrees every time i press space key. here in my code every time i decrease speed to less than 1 its rotation is not consistent at 90 decrease and speed at anything more than 1 its rotating instantly not smoothly. Here is my code

Vector3 to = new Vector3(0, 0, 90);
public float speed = 0.5f;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        RotateOne();
    }
}

void RotateOne()
{
    transform.eulerAngles = Vector3.Lerp(transform.rotation.eulerAngles, to, speed * Time.deltaTime);
    
    to  = new Vector3(0, 0, 90);
}

CodePudding user response:

Quaternion to = Quaternion.Euler(0,0,90);

transform.rotation = Quaternion.Lerp(transform.rotation, to, speed * Time.deltaTime);

Don't change to and add Time.deltaTime

CodePudding user response:

You almost had it ;)

// In general instead of eulerAngles always prefer calculating with
// Quaternion directly where possible
private Quaternion to;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        RotateOne();
    }

    // You want to do this always, not only in the one frame the key goes down
    // Rather use RotateTowards for a linear rotation speed (angle per second)
    transform.rotation = Quaternion.RotateTowards(transform.rotation, to, speed * Time.deltaTime);

    // Or if you still rather want to interpolate
    transform.rotation = Quaternion.Lerp(transform.rotation, to, speed * Time.deltaTime);
}

void RotateOne()
{  
    to *= Quaternion.Euler(0, 0, 90);
}
  • Related