[英]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]以外的值的嘗試。 外推嘗試將被限制在有效范圍內。
在a
和b
之間的lerp函數中的t
值通常需要在0-1的范圍內。 當t
為0時,該函數返回a
;當t
為1時,該函數返回b
。 之間的所有t
值將返回a
和b
之間的線性函數值。 這是簡化的一維lerp:
return a + (b - a) * t;
在這種情況下, t
負值沒有意義。 例如,如果速度變量為4.0f
,則lerp(0, 4, -0.01f)
結果為:
0 + (4 - 0) * -0.01
返回-0.04
。
解決此問題的最簡單方法是簡單地翻轉a
和b
而不是嘗試使用負t
。
_speed = Mathf.Lerp(_speed, 0.0f, 0.01f);
另一個建議是使用Mathf.SmoothStep並存儲原始速度,而不是在不斷變化的_speed
上應用該函數以獲得真正平滑的過渡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.