基于距离的补间时间
Tween time based on distance
我正在补间几个游戏对象(使用 LeanTween),如果距离点 a 和 b 之间的距离更短,我希望时间更短。几年前我曾经为它写过自己的论坛,但忘记了(duh)。有人可以给我提示吗? Mathf.Lerp
(或类似的)在这里有用吗?如果我使用下面的,它恰恰相反(距离越短时间越长,这是我不想要的)..
float time = Mathf.Lerp(source.transform.position.y, target.transform.position.y, Time.time);
如果我没看错,你想要的是恒定速度,当距离较短时,这会使你的物体更快到达。
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;
}
}
来自文档 http://docs.unity3d.com/ScriptReference/Mathf.Lerp.html
public static float Lerp(float a, float b, float t);
Linearly interpolates between a and b by t. The parameter t is clamped
to the range [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);
我正在补间几个游戏对象(使用 LeanTween),如果距离点 a 和 b 之间的距离更短,我希望时间更短。几年前我曾经为它写过自己的论坛,但忘记了(duh)。有人可以给我提示吗? Mathf.Lerp
(或类似的)在这里有用吗?如果我使用下面的,它恰恰相反(距离越短时间越长,这是我不想要的)..
float time = Mathf.Lerp(source.transform.position.y, target.transform.position.y, Time.time);
如果我没看错,你想要的是恒定速度,当距离较短时,这会使你的物体更快到达。
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;
}
}
来自文档 http://docs.unity3d.com/ScriptReference/Mathf.Lerp.html
public static float Lerp(float a, float b, float t);
Linearly interpolates between a and b by t. The parameter t is clamped to the range [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);