Vector3.Lerp错误?

时间:2018-10-05 08:38:12

标签: unity3d vector lerp

我知道如何随时间移动GameObject,但是我有一个奇怪的错误。

我正在尝试创建漂亮的动画,使相机在单击按钮时向前移动,在单击第二个按钮时向后移动。

我正在使用here中的代码来制作动画,并且遇到了奇怪的问题。

这是我的代码:

private float time = 5, current;
public void MoveBackward()
{
   StartCotoutine(MoveTo(Vector3.zero));
}

public void MoveForward()
{
   StartCotoutine(MoveTo(new Vector3(0,0,15)));
}
private IEnumerator MoveTo(Vector3 target)
{
   current=0;
   while(transform.position!=target)
   {
     transform.position = Vector3.Lerp(transform.position, target, current/time);
     current = Mathf.Clamp(current+Time.deltaTime,0,time);
     yield return null;
   }
}

向前运动效果很好,但是由于某些原因,当我尝试向后运动时,它运动得太快。我尝试打印结果(当前/时间),并且在向后移动时,当转换到达目标位置时,结果为0.1(大约)。

P.S。 -我在后台运行另一个Cotoutine(如果有关系的话)

你知道为什么会发生吗?

预先感谢

1 个答案:

答案 0 :(得分:1)

问题在于您如何在此处呼叫lerp:

transform.position = Vector3.Lerp(transform.position, target, current/time);

这将告诉它根据时间从当前位置一直结束,这不是线性的。您需要存储起始位置并将其用于所有标注中,以便获得正确的插值。

还取决于lerp的完成方式,比较浮点值可能意味着它永远不会结束。最好通过比较捆扎量来检查捆扎是否完成。