我在PC上創建一個統一的應用程序,它可以讀取移動設備的方向,並根據手機與PC屏幕的角度旋轉游戲對象。現實世界物體之間的四元數差異 - > Unity
void Update() {
// Set main screen orientation when left trigger is pressed
if(leftPad.GetTrigger())
mainScreenOrientation = InputState.orientation;
Quaternion delta = InputState.orientation * Quaternion.Inverse(mainScreenOrientation);
transform.localRotation = delta;
}
InputState.orientation是手機的方向,每幀更新一次。當用戶第一次啓動應用程序時,手機必須指向屏幕才能註冊mainScreenOrientation。
目前手機和PC屏幕方向之間的增量計算和遊戲對象的transform.localRotation
所有四元數與Y規定指向磁北設置,X指向東和z朝上
註冊後,遊戲對象的方向被正確設置爲標識,但是當旋轉手機時,對象似乎在錯誤的軸上旋轉。任何想法這有什麼問題?
編輯:
原來有與代碼
幾個問題傑羅姆提到的,方向有像手機在橫向模式下使用重新映射。
Quaternion.Euler(0,0,90)* InputState.orientation
統一使用左手座標,同時由傳感器讀出的輸入是正確的。否定z轉換。
我沒有解決這個實現的最後一個問題是突然跳過旋轉超過某個角度。在水平線之上以橫向模式提升手機的高度會導致物體沿z軸旋轉90度。
不知道爲什麼會發生這種情況,因爲我只處理四元數,不應該有任何不連續性。
90度的突然跳躍可能與Gimbal Lock有關。維基百科或在這裏搜索SO – Kay 2013-02-15 16:07:12
由於沒有歐拉旋轉,不能是萬向節。甚至在我使用Quaternion.Euler(0,0,90)之前,這個問題就出現了,它返回一個四元數。 – Skul 2013-02-15 16:13:44