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