我正在構建一種依靠原始陀螺儀讀數的遊戲。我使用下面的代碼獲取讀數(我使用C#):使用Unity3D API瞭解陀螺儀讀數
void Start() {
Input.gyrometer.enabled = true;
}
void Update() {
_guiText = Input.gyrometer.attitude.eulerAngles.ToString();
}
我在OnGUI()
方法在屏幕上顯示的值。當我使用Unity時,我使用的是右手座標系,我注意到來自陀螺儀的Y值對應於Unity中的X旋轉。
問題是這些值大量跳躍。例如,我可以將設備保持在X:90°,並緩慢旋轉Y軸;在某個點(270°左右)之後,X會突然翻轉180°。然而,這意味着如果我在Y設備處於270°時啓動應用程序,則X讀數將完全無法使用。 Z軸也會發生同樣的效果。
我設法通過使用下面的代碼片斷重置陀螺儀讀數,以避開這個在iOS設備上:依次Input.gyro.enabled = true;
Input.gyro.enabled = false;
我用這個來獲得設備的絕對旋轉的精確讀數,然後我用旋轉變化來得到任何其他設備移動。但是,這在Android上不起作用。
有沒有人遇到過這個?如果是這樣,你是如何得到它或者是一個無法解決的錯誤?
歐拉角始終不可靠(正如@fafase在他的回答中所述)。改爲使用四元數。我甚至會避免Quaternion.Angle。要了解歐拉角度有多危險,請查看維基百科關於[Gimbal Lock]的文章(https://en.wikipedia.org/wiki/Gimbal_lock) – Kay
Hi @Kay。我知道Gimbal Lock我將四元數轉換爲歐拉,編輯歐拉然後轉換回四元數。這仍然會導致問題嗎? –