簡體   English   中英

是否在unity3D中編輯Transform.rotation

[英]Edit or not the Transform.rotation in unity3D

在統一文檔中,在Transform.rotation下寫入:

請勿嘗試編輯/修改旋轉。

但是在該示例中,使用賦值之后的幾行transform.rotation = ...並且直接設置transform.rotation似乎是日常實踐。

但是可以推薦嗎? 那么其他屬性(例如localRotation )又如何實現rotation屬性的設置器,以便也更改localRotation?

transform.rotation的成分不是角度,因此不能作為角度來處理。

正如robertbu在本文中提到的:

許多輪換(很可能是您嘗試的輪換)可以通過其他(更簡單的)方法來完成,包括'Transform.Roate()'和直接訪問'Transform.eulerAngles'-。

Transform.Rotate()-Rotate()進行相對旋轉,默認情況下進行局部旋轉。

他們不編輯/修改旋轉的意思是,旋轉是一個統一的內置類,可以處理對象的旋轉。 因此,可以像這樣隨意設置對象的旋轉:

Transform.rotation = object.transform.rotation;

但是不建議修改內置的旋轉類。

我覺得文檔中關於此的措詞曾經更加清晰,但這就是它的含義:

我們強烈勸阻編輯transform.rotation 直接對象。 也就是說執行諸如transform.rotation = new Quaternion(0, 100, 15, 1); 除非您真的了解使用四元數的來龍去脈,這要比使用EulerAngles更加困難,因為后者更加人性化和易於理解。

您應該使用的替代方法(這也反映在文檔的代碼示例中)是Unity提供的用於更改旋轉方式的方法。 這些方法將為您解決因改變四元數值而帶來的復雜性。

如果我們仔細看看Unity提供的代碼示例:

 Quaternion target = Quaternion.Euler(tiltAroundX, 0, tiltAroundZ);
 transform.rotation = Quaternion.Slerp(transform.rotation, target,  Time.deltaTime * smooth);

這里的兩個關鍵因素是target = Quaternion.Euler() ,它采用三個歐拉角(360度標度的角度)並將它們轉換為四元數。 另一個是rotation = Quaternion.Slerp() ,它將當前旋轉作為四元數,將目標旋轉作為四元數並在兩者之間進行插值。

請注意,這兩個函數都沒有從您的側面“直接”改變transform.rotation ,但是它們都通過了Unity的內部邏輯以轉換為適當的四元數。

transform.Rotate這樣的方法也是如此。

transform.localRotation基本上與transform.rotation相同。 唯一的區別是,前者表示相對於父級的旋轉,而后者表示相對於父級的旋轉。

如果要直接編輯對象的旋轉,最簡單的方法是編輯對象的EulerAngles。 一個例子是:

transform.localEulerAngles = new Vector3(10, 150, 0);

相對於父對象,對象將繞X軸旋轉10度,並沿Y軸旋轉150度。 使用transform.eulerAngles可以相對於世界旋轉它。

請注意,盡管這是解決問題的最簡單方法。 Unity確實鼓勵使用Quaternions類及其函數來應用旋轉,因為使用Euler角會導致發生怪異的效果。

該文檔中還討論了Unity中的旋轉和方向 ,並指出(強調我的意思):

四元數可用於表示GameObject的方向或旋轉。 該表示法內部包含四個數字(在Unity中稱為x,y,z和w), 但是這些數字並不表示角度或軸,因此通常不需要直接訪問它們 除非您對四元數的數學特別感興趣,否則您只真正需要知道四元數表示3D空間中的旋轉,並且通常不需要知道或修改x,y和z屬性。

Unity使用四元數的原因尤其是,四元數不會受到萬向節鎖定的影響 ,而eulerAngles會遭受這種損害。 我引用這篇文章:

Unity將所有GameObject旋轉內容內部存儲為四元數,因為這樣做的好處超過了限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM