unity中陀螺仪控制镜头旋转

很久都没有更新博客啦,最新会更新AR相关的东西。
3D镜头旋转效果,刚开始一脸懵逼,真的不知道自己从那里下手,不是自己单独控制镜头的旋转角度,而是要获取到玩家的旋转信息。刚开始打算使用插件来实现效果,但是太贵,限制了自己的行动力,于是只能自己写啦。

  • 基础知识介绍:
    Gyroscope

  • Gyroscope.enabled(设置陀螺仪是启用的状态) 【input.gyro.enabled=true;】

  • Input.gyro (返回一个默认的陀螺仪)

  • Gyroscope.attitude(返回设备的空间方向)

  • Gyroscope.rotationRate(返回陀螺仪的转速,以弧度为单位,每秒钟绕三个轴旋转的速度)

  • Gyroscope.rotationRateUnbiased(返回没有偏差的陀螺仪转速)

  • Gyroscope.updateInterval(设置陀螺仪的间隔)

  • Gyroscope.gravity(public Vector3 gravity;重力加速度的矢量)

  • Gyroscope.userAcceleration(用户的加速度)

  • 四元素
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

public class QuaternionTest : MonoBehaviour {

public Transform target;
// Use this for initialization
void Start () {
	
}

// Update is called once per frame
void Update () {
    Vector3 relativePos = target.position - transform.position;//计算两物体之间的距离(两个点可以表示矢量的大小和方向)
    Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up);
    transform.rotation = rotation;
}

}
初识状态: 在这里插入图片描述
game状态:
在这里插入图片描述
在这里插入图片描述
水平和垂直方向上是看不出变化的,因为向量也是水平或者垂直的。
在这里插入图片描述
在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class QuaternionTest : MonoBehaviour {

public Transform target;
// Use this for initialization
void Start () {

    Quaternion angle = Quaternion.Euler(-0.82f, 0.97f, -169.8f);
    transform.rotation = angle;
}

// Update is called once per frame
void Update () {
}

}
初始状态:
在这里插入图片描述
game状态:
在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class QuaternionTest : MonoBehaviour {

public Transform target;
// Use this for initialization
void Start () {

    Quaternion angle = Quaternion.Slerp(transform.rotation, target.rotation, 1f);
    transform.rotation = angle;
}

// Update is called once per frame
void Update () {
}

}
初始:
在这里插入图片描述
game:
在这里插入图片描述
在这里插入图片描述

  • 实现:
  • 注意:陀螺仪采用的是右手坐标系,而unity里面采用的是左手坐标系:(将右手坐标转成左手坐标)

在这里插入图片描述
关键在与变换z轴
在这里插入图片描述
在这里插入图片描述
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ThreeDRotate : MonoBehaviour
{
private const float slerpFactor = 0.5f;
private void Start()
{
Input.gyro.enabled = true;//打开gyso
Input.gyro.updateInterval = 0.05f;//设置陀螺仪的间隔;
}
private void Update()
{
if (Input.gyro.enabled)
{
transform.rotation = Quaternion.Slerp(transform.rotation, ConvertRotation(Input.gyro.attitude), slerpFactor);
}
}
private Quaternion ConvertRotation(Quaternion q)
{
return Quaternion.Euler(90, 0, 0) * new Quaternion(-q.x, -q.y, q.z, q.w);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值