Unity3D C# 负 Lerp?
Unity3D C# Negative Lerp?
我想要 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 之间。
除此之外,你总是可以在 lerping 之后使数字为负数。
一些例子:
如果你想要从 -10 到 10,从 0 到 20 插入,然后减去 10。
随便浮动 = Mathf.Lerp(0f, 20f, t);
随便 -= 10f;
如果你想要从 0 到 -50,从 0 到 50 插入,然后将其设为负值。
随便浮动 = 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] 之外的 t 值的尝试,即。外推尝试将被限制在有效范围内。
a
和 b
之间的 lerp 函数中的 t
值通常需要在 0-1 范围内。当t
为0时,函数returns a
,当t
为1时,函数returns b
。 t
之间的所有值将 return 一个介于 a
和 b
之间的值作为线性函数。这是一个简化的一维 lerp:
return a + (b - a) * t;
在这种情况下,t
的负值没有意义。例如,如果您的速度变量是 4.0f
,lerp(0, 4, -0.01f)
的结果将是:
0 + (4 - 0) * -0.01
其中 returns -0.04
.
解决此问题的最简单方法是简单地翻转 a
和 b
而不是尝试使用负数 t
.
_speed = Mathf.Lerp(_speed, 0.0f, 0.01f);
另一个建议是使用 Mathf.SmoothStep 并存储原始速度,而不是将函数应用于不断变化的 _speed
以获得真正平滑的过渡。
我想要 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 之间。
除此之外,你总是可以在 lerping 之后使数字为负数。
一些例子:
如果你想要从 -10 到 10,从 0 到 20 插入,然后减去 10。
随便浮动 = Mathf.Lerp(0f, 20f, t);
随便 -= 10f;
如果你想要从 0 到 -50,从 0 到 50 插入,然后将其设为负值。
随便浮动 = 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] 之外的 t 值的尝试,即。外推尝试将被限制在有效范围内。
a
和 b
之间的 lerp 函数中的 t
值通常需要在 0-1 范围内。当t
为0时,函数returns a
,当t
为1时,函数returns b
。 t
之间的所有值将 return 一个介于 a
和 b
之间的值作为线性函数。这是一个简化的一维 lerp:
return a + (b - a) * t;
在这种情况下,t
的负值没有意义。例如,如果您的速度变量是 4.0f
,lerp(0, 4, -0.01f)
的结果将是:
0 + (4 - 0) * -0.01
其中 returns -0.04
.
解决此问题的最简单方法是简单地翻转 a
和 b
而不是尝试使用负数 t
.
_speed = Mathf.Lerp(_speed, 0.0f, 0.01f);
另一个建议是使用 Mathf.SmoothStep 并存储原始速度,而不是将函数应用于不断变化的 _speed
以获得真正平滑的过渡。