Unity3D C# Negative Lerp?
本文关键字:Lerp Negative Unity3D | 更新日期: 2023-09-27 18:27:37
我想要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,请从0到20勒普,然后减去10。
浮动任意=数学勒普(0f,20f,t);
任意-=10f;
-
如果您希望从0到-50,请从0到50勒普,然后使其为负数。
浮动任意=数学勒普(0f,50f,t);
whatever=-whatever;
介于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
返回CCD_ 14。
解决此问题的最简单方法是简单地翻转a
和b
,而不是尝试使用负t
_speed = Mathf.Lerp(_speed, 0.0f, 0.01f);
另一个建议是使用Mathf.SmoothStep并存储原始速度,而不是在不断变化的_speed
上应用该函数,以获得真正平滑的过渡。
实际上,你不能。
Lerp函数的psuedo代码实现如下所示:
float Lerp(float begin, float end, float t)
{
t = Mathf.Clamp(t, 0, 1);
return begin * (1 - t) + end * t;
}
因此,任何给出[0,1]之外的t值的尝试,即外推尝试,都将被限制在有效范围内。