Unity使用transform.Rotate進行三維旋轉角度出現偏差
情形
最開始遇到該問題的情況比較復雜,另寫了一個例子,情形如下:
一個立方體上掛載腳本:
transform.Rotate(25, 45, 30);
效果十分正常:

改一下代碼:
transform.Rotate(-25, 0, 0);
transform.Rotate(0, -45, 0);
transform.Rotate(0, 0, -30);
結果變成了:

原因
transform.Rotate(x, y, z)方法不是在物體的三個旋轉角度上分別加x, y, z,而是根據我們給出的三個角度,尋找一個合適的軸,旋轉相應的角度,所以當分三次進行旋轉時,第三次旋轉會影響前兩次已經轉出來的角度,(大概就是轉一根歪著的筆就不是沿著中軸轉了)
解決方法
別分開旋轉,除非角度是多少無所謂,如果想在物體的三個旋轉角度上加減指定數值,可以使用
transform.localEulerAngles = new Vector3(transform.localEulerAngles.x + dx, transform.localEulerAngles.y + dy, transform.localEulerAngles + dz);
transform.localEulerAngles也不可以單獨設定某一個值,必須整個Vector3傳入,
或者實在是想分開旋轉,可以使用
transform.Rotate(-25, 0, 0, Space.World);
transform.Rotate(0, -45, 0, Space.World);
transform.Rotate(0, 0, -30, Space.Self);
我試了試,是可以轉出來(-25, -45, -30)的角度的,如果想保證一個物體的某一方向轉動和其他的分開,(比如人轉身不受身體歪成啥樣影響)也是一種可行的方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/208638.html
標籤:其他
上一篇:不用加減乘除做加法
