如何将 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。