1. Horizontal screen view, vertical screen never tried
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 直接挂载这个脚本即可通过陀螺仪来控制摄像机的旋转
/// </summary>
public class CameraRotate : MonoBehaviour
{
//陀螺仪
private Gyroscope gyro;
private Quaternion quatMult;
//设备的状态(即,空间方向)。
private Quaternion quatMap;
//移动速度
private float speed = 0.2f;
//摄像机的父对象
public GameObject camParent;
protected void Start()
{
//获取陀螺仪
gyro = Input.gyro;
//启用陀螺仪
gyro.enabled = true;
//启用陀螺仪钱需要翻转一下摄像机,否则角度不对,大家可以删除这段代码实验一下
camParent.transform.eulerAngles = new Vector3(90, 90, 0);
//用来和
quatMult = new Quaternion(0, 0, 1, 0);
}
protected void Gyro()
{
//获取设备的空间方向
quatMap = new Quaternion(gyro.attitude.x, gyro.attitude.y, gyro.attitude.z, gyro.attitude.w);
Quaternion qt = quatMap * quatMult;
//在localRotation和qt之间的插值
transform.localRotation = Quaternion.Slerp(transform.localRotation, qt, speed);
transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z);
}
protected void Update()
{
Gyro();
}
}
-------------------------------------------- Update ----- ---- Code Simplification -------------------------------------------- ------
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraRotate : MonoBehaviour
{
private Quaternion quatMult = new Quaternion(0, 0, 1, 0);
// Use this for initialization
void Start ()
{
Input.gyro.enabled=true;
//相机需要一个父物体,脚本直接挂在相机上
transform.parent.eulerAngles = new Vector3(90, 90, -90);
}
// Update is called once per frame
void Update ()
{
transform.localRotation = Input.gyro.attitude*quatMult;
}
}