我想圍繞y軸旋轉物體90度。
我想做的事情很簡單
我想做的事情很簡單。
getPosition(Quaternion rotation)
rotation.y = rotation.y 90.0f;
_rotateTarget.rotation = rotation。
它顯示錯誤。
我在網上搜索了一下,發現我需要了解Quaternion
但是,我找不到第一條線索來簡單地將物件旋轉90度。
有什么幫助嗎?
uj5u.com熱心網友回復:
一個四元數不是有三個而是有四個組件x, y, z 和w! 而且它們都在-1到1的范圍內移動。
=> 永遠不要觸摸四元數的各個組成部分,除非你真的知道你在做什么!
對于在全域Y軸上旋轉物件,你寧愿使用例如Quaternion.Euler,正如其名稱所示,從給定的歐拉空間角度生成一個Quaternion旋轉。
回傳一個圍繞z軸旋轉z度、圍繞x軸旋轉x度和圍繞y軸旋轉y度的旋轉;按這個順序應用。
rotation *= Quaternion.Euler(0, 90, 0) 。
// Or also
//rotation *= Quaternion.Euler(Vector3.up * 90);
_rotateTarget.rotation = rotation。
或者如果你想在任何給定的軸上進行旋轉,你也可以使用Quaternion.AngleAxis
rotation *= Quaternion.AngleAxis(90, Vector3.up)。
_rotateTarget.rotation = rotation;
然后你總是使用乘法*運算子來組合兩個Quaternion。
var final = rotA * rotB;
基本上意味著首先應用旋轉rotA,然后從那里開始額外應用rotB。
rotation *= rotB;
這只是一種速記的寫法
。rotation = rotation * rotB;
uj5u.com熱心網友回復:
如果你想把一個物件平滑地旋轉到一個目標旋轉,你可以使用Quaternion.Slerp。下面的腳本可以讓你設定x、y和z的旋轉。
[Header("設定")]
public Vector3 targetRotation;
public float rotationSpeed = 5;
private Quaternion currentTargetRotation;
// 在第一幀更新之前呼叫Start
void Update()
{
如果(currentTargetRotation.eulerAngles != targetRotation)
currentTargetRotation.eulerAngles = targetRotation;
transform.rotation = Quaternion.Slerp(transform.rotation, currentTargetRotation, rotationSpeed * Time.deltaTime)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/312673.html
標籤:
