簡體   English   中英

Unity3D C#負Lerp?

[英]Unity3D C# Negative Lerp?

我想控制控制動畫速度的變量,以便它在混合樹中流暢地過渡。

 void Idle()
     {
         _agent.SetDestination(transform.position);
             //Something like the following line
         _speed = Mathf.Lerp(0.0f, _speed, -0.01f);
         _animationController._anim.SetFloat("Speed", _speed);
     }

我讀到你不能忍受底片,那我該怎么做呢?

我認為您使用Lerp不好。

如Unity文檔( http://docs.unity3d.com/ScriptReference/Mathf.Lerp.html )中所述,您應該傳遞3個浮點數,最小為第一個參數,最大為第二個,時間為第三個。

第三個應該是0和1。

除此之外,您始終可以在扣掉數字后使它為負數。

一些例子 :

  • 如果您希望從-10到10,將lerp從0到20,然后減去10。

    浮動= Mathf.Lerp(0f,20f,t);

    不管-= 10f;

  • 如果您想要從0到-50,請從0到50 lerp,然后使其為負數。

    浮動= Mathf.Lerp(0f,50f,t);

    隨便什么-

好吧,你實際上不能。

Lerp函數的偽編碼實現如下所示:

float Lerp(float begin, float end, float t)
{
    t = Mathf.Clamp(t, 0, 1);
    return begin * (1 - t) + end * t;
}

因此,任何嘗試給出[0,1]以外的值的嘗試。 外推嘗試將被限制在有效范圍內。

ab之間的lerp函數中的t值通常需要在0-1的范圍內。 t為0時,該函數返回a ;當t為1時,該函數返回b 之間的所有t值將返回ab之間的線性函數值。 這是簡化的一維lerp:

return a + (b - a) * t;

在這種情況下, t負值沒有意義。 例如,如果速度變量為4.0f ,則lerp(0, 4, -0.01f)結果為:

0 + (4 - 0) * -0.01

返回-0.04

解決此問題的最簡單方法是簡單地翻轉ab而不是嘗試使用負t

_speed = Mathf.Lerp(_speed, 0.0f, 0.01f);

另一個建議是使用Mathf.SmoothStep並存儲原始速度,而不是在不斷變化的_speed上應用該函數以獲得真正平滑的過渡。

暫無
暫無

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

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