1. 程式人生 > >unity rotate 旋轉物體 限制物體旋轉角度 的大坑

unity rotate 旋轉物體 限制物體旋轉角度 的大坑

今天可是遇到一個很簡單的需求,但是卻讓我蛋疼了半天。 滑動螢幕控制物體旋轉,但是旋轉的角度要在-60到60之間。 乍一聽這簡直是小兒科啊。 判斷一下角度不就行了。相比這四元數,尤拉角雖然有時會出現萬向鎖,但是簡潔明瞭啊。 這不,我就中了一個簡潔明瞭的大坑。
圖中,如果你以為transform.eulerAngles =(-1,0,90) 那就大錯特錯了。 因為對於旋轉來說。360度是一個迴圈。-1° 也可以算是就是359° 而且unity就是這樣認為的。面板上雖然顯示的是-1。但是他執行時是359。 這就讓我的判斷出了問題。 if(angle>60) transform.eulerAngles = new Vector3(60, transform.eulerAngles.y, transform.eulerAngles.z); if(angle<-60) transform.eulerAngles = new Vector3(-60, transform.eulerAngles.y, transform.eulerAngles.z); 這樣你就會發現 你的物體處並不受控制,有時候還會出現一種奇葩的狀態。 因為當x的值小於0後,他又變回359了。這樣又走到第一個if裡面了。 那要怎麼辦呢。解決方法就是:你不是負數 我把你變成負數。 public float CheckAngle(float value) { float angle = value - 180; if (angle > 0) return angle - 180; return angle + 180; } 通過這個方法,將他的角度在變回負數。

可以看到 圖中 x的值是-26但是輸出實際上是333。經過方法的轉換才能成為顯示的值。 這樣就可以計算了。 2011年就有人提出這個問題了。在官方論壇下2016年還有回答。看來真是坑了不少人。