How can I detect if the phone is looking down?

How can one detect if the phone is looking down using the gyroscope?

I’ve been playing around hours with the phone gyroscope and rotations and I couldn’t figure out how to detect if the phone is looking down or not.

I want to know at what degree the phone is compared to the ground.

suppose that the phone camera is looking directly downwards towards earth is the 0 degrees while looking right ahead at the horizon is 90 degrees.

Well I did once make a spirit level using a Gyroscope, which works on the x-axis and z-axis of your device. There are multiple ways of checking for screen orientation in world space. It’s how your phone knows to turn portrait and landscape when tilted:


  • You could use the accelerometer, for example, on one of the axis to work out how tilted it is.
  • As well as the Gyroscope, which I’m going to use for this example.

Gyroscope Bubble Level

To create a bubble level that can detect whether your phone is flat (meaning facing directly up or down), you would need the gyroscope readings on the x-axis.

For example:

public class Gyroscope : MonoBehaviour
{
    private UnityEngine.Gyroscope gyro; // Gyroscope
    private Quaternion rot; // Base quaternion to get a rotation

    private void Start()
    {
        EnableGyro();
    }

    private void EnableGyro()
    {
        if (SystemInfo.supportsGyroscope)
        {
            gyro = Input.gyro;
            gyro.enabled = true;
            rot = new Quaternion(0, 0, 1, 0);
        }
    }

    private void Update()
    {
        transform.localRotation = gyro.attitude * rot;
        transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, 0);

        // The value 'transform.eulerAngles.x' 
        // is your phone's orientation on the x-axis
    }
}

I have some more code for working out how straight your phone is on the z-axis as well, but that’s for another day. You might want some text to display your orientation value, and assume a range where you can safely say that if the phone’s x-angle is inbetween these two values, it is facing down.

Hope you get it to work @foghunt