1、判断手机是否支持陀螺仪
SystemInfo.supportsGyroscope

2、获取陀螺仪数据并转换

Gyroscope gyro = Input.gyro;
gyro.enabled = true;

读取陀螺仪数据并转换到右手坐标系下

var att = Input.gyro.attitude * Quaternion.identity;
att = new Quaternion(att.x, att.y, -att.z, -att.w);

由于unity里边是左手坐标系,因此需要做偏转(先进行a旋转再进行b旋转等价于执行乘积ba代表的单一旋转因此四元数能用来连接多次旋转,这个矩阵乘法的效果一样,根据四元数乘法的定义这个旋转是以从右向左的顺序发生的**)

Quaternion curGyroRotation = Quaternion.Euler(90, 0, 0) * att;

3、但是实现开发过程中游戏内部的正方向是一定的,要让用户以不同的方向进入游戏都可以正常玩,就需要求出当前陀螺仪数据和游戏中初始方向的差值,当然差值x,y,z方向都有值,但为了用户方便,把x,z方向的偏差忽略,只计算y方向的偏差,如果算x,z,用户在使用过程中旋转角度会很累,脖子的偏转角度有限,哈哈。。。

curGyroRotation = Quaternion.Euler(0, curGyroRotation.eulerAngles.y, 0);
//trsRoler.eulerAngles 游戏开始时角色的角度
Quaternion standRotation = Quaternion.Euler(0, trsRoler.eulerAngles.y, 0);Quaternion gyroRotationOff = Quaternion.Inverse(curGyroRotation) * standRotation;

为什么要用这个函数(Quaternion.Inverse),看下图

由于四元数相乘是角度的叠加,要求角度差,只能通过矩阵转置了。

求得角度差之后我们就可以拿来改变摄像机了
Quaternion realGyroRotation = Quaternion.Euler(90, gyroRotationOff .eulerAngles.y, 0) * att;
4、游戏刚开始时,不可能让玩家带着cardboard转圈去找startUI, 因此必须固定y和z,只让用户能够操控x,就头上下活动,注(场景中NGUI的3D摄像机UI)

 Quaternion tmpRotation = GetGyroRotation();Vector3 euler = tmpRotation.eulerAngles;euler.y = 0;euler.z = 0;trsUICamera3D.eulerAngles = euler;

距离做完VR半年过去了,最近同事问,又给同事讲解了下,贴出自己的拙见供大家探讨!

VR开发中陀螺仪数据转换相关推荐

  1. VR开发中性能问题—OculusWaitForGPU

    http://blog.csdn.net/cartzhang/article/details/50788894 VR开发中性能问题-OculusWaitForGPU 本文章由cartzhang编写,转 ...

  2. Unity VR开发中UI始终优先渲染不被物体遮挡

    Unity VR开发中UI始终优先渲染不被物体遮挡 在用Vive开发VR的时候,3DUI很容易被场景中的物体遮挡,解决办法是使用一个Shader:Overlay.shader,这个shader很好找, ...

  3. 【狂云歌之unity_vr】VR开发中的优化

    [狂云歌之unity_vr]VR开发中的优化 前言 大概做了大半年的VR开发,HTCVive上与room scale和手柄控制器.激光相关的开发做过,gearvr使用oculus sdk开发做过,使用 ...

  4. 7个VR开发中容易混淆的概念:SteamVR、OpenVR、OpenXR……

    在进行Unity VR应用程序开发过程中,有几个容易混淆的概念, 本文将尝试做一次区分,如果有任何疑问,读者可在文末留言共同讨论.这几个概念包括OpenVR .OpenVR Desktop.OpenV ...

  5. VR硬件演进与其游戏开发中的若干注意事项

    最近两年虚拟现实(Virtual Reality,简称VR)从刚刚走进公众视野到逐渐变得炙手可热,很多不同领域的IT开发者都想进入虚拟现实领域.本篇文章将首先讲解VR入门所需要学习的知识,然后从VR软 ...

  6. VR开发基础(一)一文理清unity xr plugin架构与openxr标准

    一,VR开发中的几个概念:从openVR到openXR 1. OpenVR OpenVR是Valve公司开发的一套包含一系列SDK和API的工具集,旨在从驱动层级为硬件厂商提供软硬件开发支持.硬件设备 ...

  7. 访《VR开发实战》作者冀盼——VR 开发者的核心竞争力

    "一边是火焰,一边是深海",可谓是 VR 行业的真实写照,因资本而起又因资本而却的 VR ,一时之间宛如六月天.如今硬件不温不火持续地升级,应用也一步一步地向 B 端市场摸索前行, ...

  8. 【VR开发】Unity中VR开发的基本设置-如何设置Player视角

    [背景] 上一篇博文,我们通过导入需要的插件完成了Unity中VR开发的环境准备,接下来就需要在项目中真正着手布局VR,首先就是作为玩家的视角如何导入. [设置方法] 在Hierarchy中新建一个空 ...

  9. Android开发中Google VR全景的实现

    VR在现在生活中已经随处可见,在移动端上的应用更是屡见不鲜,在android 开发中VR更是应用在多个领域,汽车.家装.景区等,下面我就使用google的vr-sdk简单实现全景: 1.效果图如下: ...

最新文章

  1. php新版本废弃 preg_replace /e 修饰符
  2. MOBA项目定点数的一个想法
  3. 查看进程状态信息命令 jps - (Java Virtual Machine Process Status Tool)
  4. leetcode 36. Valid Sudoku | 37. Sudoku Solver(数独)
  5. vscode终端无法输入
  6. 原来AI也可以如此简单!教你从0到1开发开源知识问答机器人
  7. Python+tkinter根据窗体大小自动缩放并显示图像
  8. amazon linux 用户名,如何在Amazon AWS上设置一台Linux服务器
  9. linux alias命令
  10. jpg格式怎么免费压缩大小
  11. 打印机提示服务器状态未知,win7打印机提示rpc服务器不可用怎么办
  12. 数据库:园林软件(综合类题库)
  13. ubuntu16.04 安装jre
  14. 分形理论与波动理论研究
  15. c#入门经典第6版pdf百度云盘_C#入门经典第6版中文pdf_NET教程
  16. python中文乱码如何处理、如何处理跨域_解决Python发送Http请求时,中文乱码的问题...
  17. Linux之nslookup命令使用详解—网络故障定位(一)
  18. Mac OS之Latex(MacTeX)初体验
  19. python--re模块及爬取红牛分公司实战演练
  20. 51 汇编语言编程--输入密码

热门文章

  1. android 动态设边距,在代码中动态设置页边距 - android
  2. 骨头收藏家-01背包
  3. 初探Oracle:Oracle用户管理命(命令)
  4. E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
  5. 爬取两万多数据,告诉你广州房租价格现状(4)
  6. Linux解压下载安装命令
  7. 微信为何先推出mac版本而后推出windows版本
  8. 基础指标(原子指标)、复合指标、派生(衍生)指标的含义
  9. 11-20210225华为海思Hi3518EV300在鸿蒙系统下测试摄像头(拍照+录像)
  10. 目标检测 | Anchor free之CenterNet深度解析