Math 基于距离的时间差

Math 基于距离的时间差,math,unity3d,tween,lerp,Math,Unity3d,Tween,Lerp,我正在使用LeanTween对几个游戏对象进行二次加密,如果距离点a和b之间的距离较短,我希望时间更短。几年前我曾为它写过我自己的论坛,但后来忘了。谁能给我一个提示吗?Mathf.Lerp(或类似)在这里有什么用处吗?如果我使用下面的方法,效果正好相反(时间越长,距离越短,这是我不想要的) 如果我没弄错的话,你想要的是一个恒定的速度,当距离较短时,它会使你的物体到达得更快 float speed = 2f; // 2 units per second void Update() { V

我正在使用LeanTween对几个游戏对象进行二次加密,如果距离点a和b之间的距离较短,我希望时间更短。几年前我曾为它写过我自己的论坛,但后来忘了。谁能给我一个提示吗?
Mathf.Lerp
(或类似)在这里有什么用处吗?如果我使用下面的方法,效果正好相反(时间越长,距离越短,这是我不想要的)


如果我没弄错的话,你想要的是一个恒定的速度,当距离较短时,它会使你的物体到达得更快

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;
    }
}
来自文档

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

通过t在a和b之间线性插值。参数t是固定的 到范围[0,1]

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

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


这可以正常工作,但使用更新来进行粗花处理。在我的例子中,我想使用一个专用的Tweener来使用缓和方程和其他功能。非常感谢!这正是我要找的!但有一个问题:tweenObject.transform.position和source.transform.position最初是相同的。这意味着这个时间值需要在tween期间不断更新?是的,您可能需要在update()、FixedUpdate()或其他适当的函数中更新它
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;
    }
}
float time = Mathf.Lerp(tweenObject.transform.position.y, 
target.transform.position.y, 
source.transform.position.y / tweenObject.transform.position.y);