I can use the following code to rotate object using accelerometer.

transform.rotation = Quaternion.LookRotation(Input.acceleration.normalized, Vector3.up);

But i would like to rotate object like for example screen is rotating - 0, 90, 180 and 360 degrees. How can I do it using Unity 3D?


Solution 1:

You can use transform.rotation like this:

transform.rotation = new Quaternion(rotx, roty, rotz, rotw);

OR

You can use transform.Rotate like this:

transform.Rotate(rotx, roty, rotz);

Documentation for Quaternion

Documentation for transform.rotation

Example for Rotating screen with accelerometer input:

float accelx, accely, accelz = 0;

void Update ()
{
    accelx = Input.acceleration.x;
    accely = Input.acceleration.y;
    accelz = Input.acceleration.z;
    transform.Rotate (accelx * Time.deltaTime, accely * Time.deltaTime, accelz * Time.deltaTime);
}

If you want to rotate the object to a specific angle use:

float degrees = 90;
Vector3 to = new Vector3(degrees, 0, 0);

transform.eulerAngles = Vector3.Lerp(transform.rotation.eulerAngles, to, Time.deltaTime);

This will rotate 90 degrees around the x axis.

Solution 2:

In order to rotate your game object on its own

int _rotationSpeed = 15;

void Update () {

    // Rotation on y axis
    // be sure to capitalize Rotate or you'll get errors
    transform.Rotate(0, _rotationSpeed * Time.deltaTime, 0);
}