Unity使用transform.Rotate進行三維旋轉角度出現誤差

Unity使用transform.Rotate進行三維旋轉角度出現誤差

情形

最開始遇到該問題的狀況比較複雜,另寫了一個例子。情形以下:c#

一個立方體上掛載腳本:code

transform.Rotate(25, 45, 30);

效果十分正常:orm

改一下代碼:blog

transform.Rotate(-25, 0, 0);
transform.Rotate(0, -45, 0);
transform.Rotate(0, 0, -30);

結果變成了:it

緣由

transform.Rotate(x, y, z)方法不是在物體的三個旋轉角度上分別加x, y, z,而是根據咱們給出的三個角度,尋找一個合適的軸,旋轉相應的角度。因此當分三次進行旋轉時,第三次旋轉會影響前兩次已經轉出來的角度。(大概就是轉一根歪着的筆就不是沿着中軸轉了)form

解決方法

別分開旋轉,除非角度是多少無所謂。若是想在物體的三個旋轉角度上加減指定數值,能夠使用class

transform.localEulerAngles = new Vector3(transform.localEulerAngles.x + dx, transform.localEulerAngles.y + dy, transform.localEulerAngles + dz);transform

transform.localEulerAngles也不能夠單獨設置某一個值,必須整個Vector3傳入。方法

或者實在是想分開旋轉,能夠使用im

transform.Rotate(-25, 0, 0, Space.World);
transform.Rotate(0, -45, 0, Space.World);
transform.Rotate(0, 0, -30, Space.Self);

我試了試,是能夠轉出來(-25, -45, -30)的角度的。若是想保證一個物體的某一方向轉動和其餘的分開,(好比人轉身不受身體歪成啥樣影響)也是一種可行的方法。

相關文章
相關標籤/搜索