锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Unity的陀螺仪实现

时间:2022-11-17 18:30:00 陀螺仪传感器api

陀螺仪的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);
    }
}
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章