使用Unity 3D制作泡泡级别?

时间:2014-10-30 03:57:38

标签: c# unity3d gyroscope

我从Unity 3D开始,我想做一个简单的游戏,你可以通过倾斜设备将大理石移动到迷宫中。

为此我需要知道手机的倾斜方向(移动球的位置)和移动速度(移动速度有多快)。来自iOS7的这个气泡级别做类似的事情,数字旋转以显示您倾斜设备的方向,数值代表手机倾斜的程度:

enter image description here

我一直在尝试使用Input.gyro.attitude.eulerAngles,但我不确定如何将其转换为我需要的值,我也不确定gyro.attitude是否是获得响应控件的最佳解决方案

如何获得设备的方向和倾斜度?

Unity3D文档有一个使用Input.accelaration的解决方案但是我不确定它是否像Input.gyro一样可靠。 http://docs.unity3d.com/ScriptReference/Input-acceleration.html

这就是我现在正在尝试的事情:

private Gyroscope gyro;

void Start () {
    gyro = Input.gyro; // Store the reference for Gyroscope sensor 
    gyro.enabled = true; //Enable the Gyroscope sensor
}

void Update () { 
    // Gyroscope
    Vector3 vec = gyro.attitude * Vector3.forward;
    print (vec);

    // Option 2
    print(Input.accelaration);
}

1 个答案:

答案 0 :(得分:1)

你应该能够这样做(在这种情况下,采用四元数的XZ平面投影=更改第二行中的Vector3以选择你想要的平面);

    // where q is the Quaternion from the gyro

    Matrix4x4 quatMatrix = Matrix4x4.TRS(Vector3.zero, q, Vector3.one);
    Matrix4x4 scaleMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, 0, 1));
    Matrix4x4 scaled_matrix  = scaleMatrix * quatMatrix;
    OutVector = scaled_matrix.MultiplyVector(Vector3.forward).normalized;

那应该给你一个只有X和Z分量的三维矢量,很容易变成一个二维矢量。