我是新手,我嘗試開始使用Unity Engine。有人可以解釋一下,Quaternion.Slerp怎么樣?因為我想以不同的角度90,180和270旋轉一些物體。我可以在下面看到我的代碼。不幸的是,當我添加180度時,對象會做出瘋狂的事情,而不是將旋轉放到(0,180,180)這個游戲對象。我想得到(180,0,0) public float speed = 0.1F; private float rotation_x; void Update() { if (Input.GetButtonDown("Fire1")) { rotation_x = transform.rotation.eulerAngles.x; rotation_x += 180; } transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(rotation_x, transform.eulerAngles.y, transform.eulerAngles.z), Time.time * speed); }
3 回答

牛魔王的故事
TA貢獻1830條經驗 獲得超3個贊
在此之前,你不能在這樣的歐拉角上添加180,這主要是造成問題的原因。你最好直接使用quaternion,或者在變換本身上工作。
您可以將四元數視為空間方向。與已經說過的相反,如果可以的話,我建議學習如何使用它們。但是,我建議不要使用歐拉角......因為它們會采用不同的寫作慣例,有時會失敗。如果你想了解詳情,你可以看看'萬向節鎖'。
簡單地說slerp或lerp(分別代表球面線性插值或線性插值)是一種在方向A和B之間進行插值(從一個方向到另一個方向,通過在協程或其他任何地方將t從0增加到1)的方法兩者之間的區別在于slerp給你從A到B的最短路徑。
最后,當t = 1時,lerp(A,B,t)和slerp(A,B,t)會給你B.
在您的情況下,如果您想立即將空間中的對象旋轉到特定方向,我建議您使用Quaternion.AngleAxis,這是以數學方式描述四元數的最前向方法。
如果你想要添加一個旋轉,比如說實際方向是90°(兩者之間沒有動畫),你可以這樣做:
transform.rotation * = Quaternion.AngleAxis(axis_of_rotation,angle)或使用transform.rotate(取決于參數,它可以是右乘,或左:本地或世界變換)。
程序員的回答是詳細說明如何為變換設置動畫。但我確實建議你自己研究四元數,因為它會讓你全面了解空間變換。
- 3 回答
- 0 關注
- 569 瀏覽
添加回答
舉報
0/150
提交
取消