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);
     }

我读到你不能读底片,那么我该怎么做呢?

Unity3D C# Negative Lerp?

我认为您使用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;

介于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

返回CCD_ 14。

解决此问题的最简单方法是简单地翻转ab,而不是尝试使用负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值的尝试,即外推尝试,都将被限制在有效范围内。