繁体   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