如何将 lerp 转换为三次缓动?
How to convert lerp to cubic easing in?
我需要将以下代码从使用 lerp 转换为使用 cubic easing in,但我不知道如何处理 cubic easing in 函数返回的浮点值,因为我使用的是 Vector3 而不是浮动。有人可以给我提示吗?
if (Vector3.Distance(activeTween.Target.position, activeTween.EndPos) > 0.1f)
{
float fraction = (Time.time - activeTween.StartTime) / activeTween.Duration;
activeTween.Target.position = Vector3.Lerp(activeTween.StartPos, activeTween.EndPos, fraction);
}
您可能应该只用它代替 Vector3.Lerp
中的 fraction
。
Lerp 只是向量的线性插值,即 0.3 表示一个向量的 30% 和另一个向量的 70%。如果我们想要非线性插值,我们可以对输入值应用一些任意函数。例如,0.3 可以转换为 0.027,然后可以用作 Lerp 的输入以获得 2.7% / 97.3% 混合。
您需要一个三次函数,它在开始时为 0,在结束时为 1。
我会尝试类似的东西:
public float EaseIn(float t)
{
return t * t * t;
}
if (Vector3.Distance(activeTween.Target.position, activeTween.EndPos) > 0.1f)
{
float fraction = (Time.time - activeTween.StartTime) / activeTween.Duration;
activeTween.Target.position = Vector3.Lerp(activeTween.StartPos, activeTween.EndPos, EaseIn(fraction));
}
假设 fraction
已经从 0 变为 1。
我需要将以下代码从使用 lerp 转换为使用 cubic easing in,但我不知道如何处理 cubic easing in 函数返回的浮点值,因为我使用的是 Vector3 而不是浮动。有人可以给我提示吗?
if (Vector3.Distance(activeTween.Target.position, activeTween.EndPos) > 0.1f)
{
float fraction = (Time.time - activeTween.StartTime) / activeTween.Duration;
activeTween.Target.position = Vector3.Lerp(activeTween.StartPos, activeTween.EndPos, fraction);
}
您可能应该只用它代替 Vector3.Lerp
中的 fraction
。
Lerp 只是向量的线性插值,即 0.3 表示一个向量的 30% 和另一个向量的 70%。如果我们想要非线性插值,我们可以对输入值应用一些任意函数。例如,0.3 可以转换为 0.027,然后可以用作 Lerp 的输入以获得 2.7% / 97.3% 混合。
您需要一个三次函数,它在开始时为 0,在结束时为 1。 我会尝试类似的东西:
public float EaseIn(float t)
{
return t * t * t;
}
if (Vector3.Distance(activeTween.Target.position, activeTween.EndPos) > 0.1f)
{
float fraction = (Time.time - activeTween.StartTime) / activeTween.Duration;
activeTween.Target.position = Vector3.Lerp(activeTween.StartPos, activeTween.EndPos, EaseIn(fraction));
}
假设 fraction
已经从 0 变为 1。