表示我的注释写清楚了每一步的作用,所以就不做多的说明了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Gyro : MonoBehaviour
{
public bool first;
// Use this for initialization
void Start ()
{
// 开启陀螺仪
Input.gyro.enabled = true;
}
// Update is called once per frame
void Update ()
{
// 第一次获取到陀螺仪重力加速度数据 这个数值决定当前手机的初始姿态,是水平放置,还是竖直放置的 只要Z轴有值,手机就不是水平放置的
if(first && Input.gyro.gravity != Vector3.zero)
{
// 这里让unity的相机初始姿态和手机的一样
Vector3 v = new Vector3(Input.gyro.gravity.z * -90, 0, 0);
this.transform.localEulerAngles = v;
first = false;
}
else
{
// 陀螺仪控制unity相机 陀螺仪和unity摄像机的旋转方向刚好是反的
Vector3 v = Input.gyro.rotationRateUnbiased;
// 屏蔽unity摄像机的Z轴旋转,不知道是不是陀螺仪的原因,还是我操作的原因,
// 不屏蔽这个轴向,让unity相机自由旋转 偶尔会Uniyt摄像机角度无法恢复过来
v.z = 0;
this.transform.localEulerAngles -= v;
}
}
}
PS:
只适合简答的时候,要完全正确的使用,需要对陀螺仪的姿态进行各种转换;
完美的解决方案