[英]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.