补间时间基于距离

时间:2016-01-03 11:25:09

标签: math unity3d tween lerp

我正在补充几个游戏对象(使用LeanTween),如果距离点a和b之间的距离较短,则希望时间更短。我曾经多年前写过我自己的论坛,但忘记了(呃)。有人可以给我一个暗示吗?并且Mathf.Lerp(或类似)在这里有用吗?如果我使用以下内容,则完全相反(时间越长,距离越短,这是我不想要的)。

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

2 个答案:

答案 0 :(得分:1)

如果我找到你,你想要的是一个恒定的速度,当你的距离变短时,你的物体会更快到达。

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;
    }
}

答案 1 :(得分:1)

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

  

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

     

在a和b之间用t线性插值。参数t被钳制   到范围[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);