我从Unity 3D开始,我想做一个简单的游戏,你可以通过倾斜设备将大理石移动到迷宫中。
为此我需要知道手机的倾斜方向(移动球的位置)和移动速度(移动速度有多快)。来自iOS7的这个气泡级别做类似的事情,数字旋转以显示您倾斜设备的方向,数值代表手机倾斜的程度:
我一直在尝试使用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);
}
答案 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分量的三维矢量,很容易变成一个二维矢量。