Unity-陀螺仪控制Camera旋转
来源:互联网 发布:mac 泳道图 工具 编辑:程序博客网 时间:2024/06/09 16:15
使用陀螺仪控制Unity Camera旋转,需要注意两个问题:
1.左、右手坐标系转换:
陀螺仪的数据使用的坐标系是右手坐标系,而Unity场景的世界坐标系是左手坐标系,所以在使用陀螺仪数据时,需要将其转换为左手坐标系,代码如下:
Quaternion(-q.x, -q.y, q.z, q.w)或者Quaternion(q.x, q.y, -q.z, -q.w)
w = cos(theta/2)
x = ax * sin(theta/2)
y = ay * sin(theta/2)
z = az * sin(theta/2)
右手坐标系转左手坐标系,首先要将Z变为-Z,由于左右手坐标系的旋转方向相反,所以theta为-theta,代入求得Quaternion(-q.x, -q.y, q.z, q.w)
2.使用场景:
对于VR场景,通常是竖着放置手机,因此手机需要绕X轴旋转90度,即
Quaternion.Euler(90, 0, 0)当然有些代码中会使用Quaternion.Euler(90, 0, 90),这并不会影响功能,只是影响左右旋转的初始位置
对于MR场景,通常是将手机屏幕面朝下平放,因此手机需要绕X轴旋转180度,即
Quaternion.Euler(180, 0, 0)
此时,场景的旋转坐标系/陀螺仪的旋转坐标系和现实世界不一致,也就是说当左右转头时,陀螺仪和场景绕Z轴旋转,场景实际是希望绕Y轴负方向旋转;
陀螺仪和场景绕Y轴旋转时,场景实际是希望绕Z轴正方向旋转,即
Quaternion.Euler(180, 0, 0) * (new Quaternion(-q.x, q.z, q.y, q.w));
3.完整代码:
using System.Collections;using System.Collections.Generic;using UnityEngine;public class CameraControllerByGyro : MonoBehaviour{ private const float slerpFactor = 0.5f; // Use this for initialization void Start() { Input.gyro.enabled = true; Input.gyro.updateInterval = 0.05f; } // Update is called once per frame void Update() { if (Input.gyro.enabled) { transform.rotation = Quaternion.Slerp(transform.rotation, ConvertRotation(Input.gyro.attitude), slerpFactor); //transform.rotation = ConvertRotation(Input.gyro.attitude); } } private Quaternion ConvertRotation(Quaternion q) { return Quaternion.Euler(90, 0, 0) * (new Quaternion(-q.x, -q.y, q.z, q.w)); }}
阅读全文
0 0
- Unity-陀螺仪控制Camera旋转
- 【unity实用技能】unity3d 陀螺仪控制camera移动旋转
- Unity中陀螺仪控制
- unity 只有一个方向旋转的陀螺仪
- unity3d控制camera移动旋转
- Unity控制移动、旋转
- 关于Unity的旋转,陀螺仪相关的一些记录
- Unity陀螺仪
- Unity陀螺仪
- Unity陀螺仪
- unity陀螺仪
- Unity3D中通过陀螺仪来控制摄像机的旋转
- 【C#】AR unity 陀螺仪控制摄像机 真实方向
- Unity实现对移动端的陀螺仪控制
- unity 控制对象移动、旋转
- unity 控制旋转的方法
- Unity触摸控制旋转缩放
- Unity视角控制和Camera的移动
- HTML 基础知识
- handler
- 在ViewPager和TabLayout连用时,去除ViewPager预加载
- win7安装
- SSL2541 2016提高组模拟试题 敌敌(树形dp)
- Unity-陀螺仪控制Camera旋转
- C# 连接、操作SqlServer数据库--日常笔记
- 简单的左右切换代码
- Go 环境搭建(Windows版)
- Leetcode 7. Reverse Integer(java版)
- 知识焦虑
- [BZOJ1799]-数位DP(奇怪的DP方式)
- 实验4:栈和队列的基本操作实现及其应用
- Java 遍历利用entry遍历Map时类型转换的问题