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