基于距离的补间时间

Tween time based on distance

我正在补间几个游戏对象(使用 LeanTween),如果距离点 a 和 b 之间的距离更短,我希望时间更短。几年前我曾经为它写过自己的论坛,但忘记了(duh)。有人可以给我提示吗? Mathf.Lerp(或类似的)在这里有用吗?如果我使用下面的,它恰恰相反(距离越短时间越长,这是我不想要的)..

float time = Mathf.Lerp(source.transform.position.y, target.transform.position.y, Time.time);

如果我没看错,你想要的是恒定速度,当距离较短时,这会使你的物体更快到达。

float speed = 2f; // 2 units per second

void Update()
{
    Vector3 distance = targetPosition - transform.position;
    float distanceLen = distance.magnitude;

    float stepSize = Time.deltaTime * speed;

    if (stepSize > distanceLen)
        transform.position = targetPosition;
    else
    {
        Vector3 direction = distance.normalized;
        transform.position += direction * stepSize;
    }
}

来自文档 http://docs.unity3d.com/ScriptReference/Mathf.Lerp.html

public static float Lerp(float a, float b, float t);

Linearly interpolates between a and b by t. The parameter t is clamped to the range [0, 1].

因此,在大多数情况下,样本中的 time 变量将等于 target.transform.position.y,因为 Time.time 正在增加。这就是为什么你的时间变长了。

以下代码将根据行进距离缩短时间(tweenObject 是由 LeanTween 控制的对象)

float time = Mathf.Lerp(tweenObject.transform.position.y, 
target.transform.position.y, 
source.transform.position.y / tweenObject.transform.position.y);