0

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

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

2 回答 2

1

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

公共静态浮动 Lerp(浮动 a, 浮动 b, 浮动 t);

在 a 和 b 之间线性插值 t。参数 t 被限制在 [0, 1] 范围内。

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

以下代码将根据行驶距离减少时间(tweenObject是由 LeanTween 控制的对象)

float time = Mathf.Lerp(tweenObject.transform.position.y, 
target.transform.position.y, 
source.transform.position.y / tweenObject.transform.position.y);
于 2016-01-03T23:36:18.337 回答
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;
    }
}
于 2016-01-03T11:59:55.823 回答