我知道如何随时间移动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
(如果有关系的话)
你知道为什么会发生吗?
预先感谢
答案 0 :(得分:1)
问题在于您如何在此处呼叫lerp:
transform.position = Vector3.Lerp(transform.position, target, current/time);
这将告诉它根据时间从当前位置一直结束,这不是线性的。您需要存储起始位置并将其用于所有标注中,以便获得正确的插值。
还取决于lerp的完成方式,比较浮点值可能意味着它永远不会结束。最好通过比较捆扎量来检查捆扎是否完成。