Uniyt 使用手机陀螺仪控制摄像头

2018-08-24  本文已影响52人  爱喝粥的西瓜

表示我的注释写清楚了每一步的作用,所以就不做多的说明了

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:
只适合简答的时候,要完全正确的使用,需要对陀螺仪的姿态进行各种转换;
完美的解决方案

上一篇下一篇

猜你喜欢

热点阅读