Hi all! I’m developing a mobile game with a gyroscopic, VR-style camera, which rotates to face wherever the player is pointing their device. I’ve got this up and running the way I want it with devices containing a gyroscope sensor (so Apple devices are behaving nicely), however I ideally would like this game to be available to Android users, and I’m aware that most current Android devices do not have gyroscope sensors.
What I’ve been trying to do in light of this is make an accelerometer-controlled camera which achieves a gyroscopic-like effect. I’ve been able to achieve good results along the camera’s x axis using accelerometer input, so the camera nods up and down as the player tilts the device in a very similar way to a gyroscopic camera. However, I’ve hit a wall as I’m trying to now implement movement along the camera’s y axis when the player tilts the device left and right.
The problem is that when the device is held upright, so that the screen is directly in front of the player’s face, and is then tilted from side to side, I notice that the input vector3 from the accelerometer does not change significantly. The same is also true when the device is lying flat and being rotated in a circle like a steering wheel.
What I wanted to know is if there is any way I can rotate the camera along its y axis according to the side to side rotation of the device when it is held upright, or is the lack of input from the accelerometer in this scenario just an inherent limitation of accelerometers?
I’ve attached some diagrams on what I’m trying to achieve and my script, if anyone has any suggestions and/or knows what is and isn’t possible with an accelerometer, I would be very appreciative
void Update()
{
transform.rotation = Quaternion.LookRotation(new Vector3(-Input.acceleration.y, Input.acceleration.z, -Input.acceleration.x));
}