private void Update()
{
Quaternion newRotation = Quaternion.AngleAxis(180, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, .05f);
}
問題并不總是應該旋轉 180。我控制角色的移動和旋轉,并且在某些時候我希望角色旋轉到相反的方向,無論他現在面對什么方向。
如果 Y 上的旋轉是 120 或 45 或 4 或 23 總是向相反的方向旋轉。
uj5u.com熱心網友回復:
要解決這個問題,您需要一個IEnumerator
保持原始角度并隨時間變化的角度,請記住,點對點的變化永遠不能直接在 Update 中定義,否則您將不得不在考慮類的主體中使用假設變數,不建議這樣做。
public IEnumerator DoRotate(float time)
{
var newRotation = Quaternion.AngleAxis(180, Vector3.up) * transform.rotation;
var progress = 0f;
while (progress < 1)
{
progress = Time.deltaTime/time;
transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, progress);
yield return new WaitForEndOfFrame();
}
}
定義后IEnumerator
,只需要啟動一次就足夠了,如下所示,角色將在定義的時間旋轉。
public void Start() => StartCoroutine(DoRotate(2f)); // rotate over 2 seconds
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488288.html
下一篇:發生OnTriggerEnterOnTriggerExit事件時,如何為每個對撞機創建TextArea屬性欄位?