1

可以通过在 Unity 中从智能手机的 Gyro 导入四元数数据来旋转对象。

目前的问题是四元数转换欧拉知道3轴角度的过程中,出现了云台锁,x轴数据出不来。

我该如何解决这个问题?

代码

using UnityEngine;

public class Device_Data_Load : MonoBehaviour
{

public GameObject phone;

public float time;

void Start()
{
    Input.gyro.enabled = true;
}

void Update()
{
    time += Time.deltaTime;
    phone.transform.rotation = Input.gyro.attitude;

    text.text = "1. playTime : " + time.ToString("N2")
              + "\r\n\n2. Gyroattitude : " + Input.gyro.attitude
              + "\r\n\n3. Gyroattitude.ToEuler : " + Input.gyro.attitude.ToEuler()
              + "\r\n\n4. Gyroattitude.ToEulerAngles : " + Input.gyro.attitude.ToEulerAngles()
              + "\r\n\n5. Gyroattitude.eulerAngles : " + Input.gyro.attitude.eulerAngles
              + "\r\n\n6. phone.transform.rotation : " + phone.transform.rotation
              + "\r\n\n7. phone.transform.eulerAngles : " + phone.transform.eulerAngles;
}

}

站点 1:https ://flowtree.tistory.com/28

我从google play store下载了Unity Remote,并参考Site 1在手机上进行了各种设置。

在 Unity 项目中,我们创建了一个空的游戏对象,并在游戏场景的中心添加了一个文本对象。如果从 Inspector 添加并执行两个对象,将获得以下结果。

旋转是四元数,所以它不需要云台锁定,但是在你使用 Quaternion.eulerAngles 将它转换为你可以识别的角度的过程中,它似乎需要云台锁定。

作为参考,Input.gyro.attitude 是四元数数据类型。因此,x 轴上的数据不会出现在 90 到 270 之间。

另一种解决方案是获取 GameObject.rotation 值并在转换为 Euler 时避免云台锁定。但是不能使用Inspector中导入值到Unity编辑器的方法,因为必须在构建时解决。

UnityRemote 可在 LG V40 和三星 S20+ 上运行。

4

0 回答 0