簡體   English   中英

Slerp旋轉協同程序Unity3D的問題

[英]Problem with Slerp Rotation Coroutine Unity3D

我有一個要在檢查條件時平滑旋轉90度的對象。

我的問題是旋轉可以正常且平滑地進行,但對象沒有達到最終旋轉(90度),達到81度並停止! 我的代碼有什么問題?

腳本:

void Update() {
    if (Objects.Length == 0)
    {
        if (!Rotated)
        {
            StartCoroutine(RotateMe(Vector3.up * 90, 1f));
            Rotated = true;
        }
    }
}

IEnumerator RotateMe(Vector3 byAngles, float inTime)
{
    var fromAnglePlat = Platform.transform.rotation;
    var toAnglePlat = Quaternion.Euler(Platform.transform.eulerAngles + byAngles);

    for (var t = 0f; t < 1; t += Time.deltaTime / inTime)
    {
            Platform.transform.rotation = Quaternion.Slerp(fromAnglePlat, toAnglePlat, t);

            yield return null;
    }

}

t < 1

t永遠不會等於1,因此,將不會執行最終旋轉(至90度)。

您應該在循環之后添加Platform.transform.rotation = toAnglePlat以確保確切的所需旋轉是協程終止之前的最后一個旋轉(這將始終是正確的,而t <= 1仍然會失敗,因為0.995小於1 ,但從增量時間開始加上0.02將大於1)。

在處理slerp和lerp時,請務必記住't'參數是百分比(以十進制形式表示,所以0-1,而不是0-100),而不是線性增加。 您錯過了一個重要的變量,這是您要讓腳踝持續的時間。 通常用於獲取“ t”參數的公式是t = timeSinceStart /持續時間。

暫無
暫無

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

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