我試圖讓一個物件匹配另一個物件的旋轉增量。因此,如果物件 A 圍繞 Y 軸旋轉 90 度,我希望物件 B 也圍繞 Y 軸旋轉 90 度。因為我想每幀都做一次,所以我保存了兩個物件的初始旋轉。我嘗試這樣做,基于此論壇帖子:
objectB.transform.localRotation = (initialObjectARotation * Quaternion.Inverse(objectA.transform.localRotation)) * initialObjectBRotation;
問題是現在旋轉是反向的(我不確定這是正確的術語,但是如果我objectA向右旋轉然后objectB向左旋轉等)。我怎樣才能解決這個問題?
uj5u.com熱心網友回復:
如果您有前一幀的 B 和 A 的絕對旋轉以及 A 的新絕對旋轉,您可以求解 B 的新絕對旋轉,解釋沿每個物件區域軸的 A 差異:
Quaternion newB = oldB * Quaternion.Inverse(oldA) * newA;
如果這給了你不喜歡的結果,你可以嘗試解釋沿全域軸的差異:
Quaternion newB = newA * Quaternion.Inverse(oldA) * oldB;
最后,如果你真的想要它相對于每個物件的 parent的軸,它有點復雜,因為它涉及之前的 parent 旋轉(絕對),之前的物件區域旋轉,以及 A 的當前絕對旋轉給你B. 的當前絕對值:
newB = oldBParent * Quaternion.Inverse(oldAParent) * newA
* Quaternion.Inverse(oldALocal) * oldBLocal;
請注意,如果沒有父級,則父級旋轉是Quaternion.identity并且等效于全域軸形式。整潔的!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349297.html
上一篇:UnityMirrorNetworkingInvalidCastException:指定的演員表無效
下一篇:獲取帶有特定標簽的每個按鈕
