陀螺仪的API参数 (Unity)
Input.gyro.attitude
x:平放为0,手机按钮倾斜旋转180度->-1.继续旋转180度->0 y:平放为0,手机右侧倾斜旋转180度,数值变为-0->-1.继续旋转180度->0 z:头对西方向为0,顺时针旋转180度值为-0->-0.7->0.7->1.为什么瞬间跳跃?继续旋转180度为1->0
Input.gyro.attitude.eulerAngles
x:垂直手机屏幕靠近身体为0,手机右侧倾斜90度角度为0->90度继续旋转90度->继续旋转90度为360度->继续旋转90度270度->360 y:平放为0,手机右侧倾斜旋转旋转角度增加,范围0-360度 z:正西方向0度,顺时针旋转角度增加,0-360度
直接上代码(可直接使用)
// A code block using UnityEngine; using System.Collections; public class CamGyro : MonoBehaviour { private const float lowPassFilterFactor = 0.8f; private Quaternion startQuaternion; private Quaternion originalQuaternion; private int frameCnt = 0; void Start() { ///设置设备陀螺仪的
开关状态,使用陀螺仪的功能必须设置为 true Input.gyro.enabled = true; // Vector3 deviceGravity = Input.gyro.gravity; ///设备的旋转速度,返回结果为x,y,z轴的旋转速度为(弧度/秒) Vector3 rotationVelocity = Input.gyro.rotationRate; ///获得更准确的旋转 Vector3 rotationVelocity2 = Input.gyro.rotationRateUnbiased; //设置陀螺仪的更新检索时间,即隔离 0.1秒更新一次 Input.gyro.updateInterval = 0.1f; //获取移除重力加速度后设备的加速度 Vector3 acceleration = Input.gyro.userAcceleration; } void Update() { frameCnt ; if (frameCnt > 5 && frameCnt <= 30) { originalQuaternion = transform.rotation; startQuternion = new Quaternion(-1 * Input.gyro.attitude.x, -1 * Input.gyro.attitude.y, Input.gyro.attitude.z, Input.gyro.attitude.w); return; } Quaternion currentQuaternion = new Quaternion(-1 * Input.gyro.attitude.x, -1 * Input.gyro.attitude.y, Input.gyro.attitude.z, Input.gyro.attitude.w); //Quaternion deltaQuaternion = Quaternion.RotateTowards(startQuaternion, currentQuaternion, 180); //Input.gyro.attitude 返回值为 Quaternion类型,即设备旋转欧拉角 //transform.rotation = Quaternion.Slerp(transform.rotation, new Quaternion(-1*Input.gyro.attitude.x, -1*Input.gyro.attitude.y, Input.gyro.attitude.z, Input.gyro.attitude.w), lowPassFilterFactor); transform.rotation = Quaternion.Slerp(transform.rotation, originalQuaternion * Quaternion.Inverse(startQuaternion) * currentQuaternion, lowPassFilterFactor); } }