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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、机会,需要你去分辨 人的一生,从开始找工作,到入职后单位内部提供一些调岗或提升机会,再到组织外的诱惑,我们会面...
    李忠新阅读 430评论 0 0
  • 随着年龄的增长,通过自己的主观臆断以及身边朋友同学的想法,对这个精彩纷呈的世界中所谓的优秀的男生与优秀的女生有了...
    华知希阅读 487评论 14 16
  • La Luna-享受呼吸-201812(20180805)——《美西的La Luna-01》 月亮幽幽地升起 挂在...
    尔慷阅读 514评论 0 1
  • Atom Snippets 自定义自动展开代码可以好好学习一下atom snippets的自定义代码,还是很简单的...
    vimtest阅读 250评论 0 0
  • Big city!
    刘大安阅读 142评论 0 0