第二次移动时,Unity GameObject无法顺畅运行

时间:2017-02-15 12:38:32

标签: c# unity3d coroutine gameobject lerp

所以我有一个脚本来移动游戏对象。当我移动一个游戏对象时,它是平滑的。但是,当我第二次移动它时,这个动作非常缓慢并且看起来很快。

移动脚本中的第一个输入是对象,然后是需要移动到的位置,速度是最后一个参数。所有坐标都基于局部位置。我使用wait是因为我想在执行第二次动作之前等待。

我试图将其他物体移动两次,但它们最终都移动得很慢/越野车。

我不想在Update中运行它,这就是我使用coroutine的原因。

这是我的代码:

IEnumerator MovementGentryOne()
{
    StartCoroutine(Movement(GentryOne, MovementCoords.GentryOneBasin, gentryspeed));
    yield return new WaitForSeconds(2);
    StartCoroutine(Movement(GentryOneArm, MovementCoords.GentryArmMoved, gentryspeed));
    yield return new WaitForSeconds(2);
    StartCoroutine(Movement(GentryOnePicker, MovementCoords.GentryPickerPick, gentryspeed));

    yield return new WaitForSeconds(4);
//this one is not working smooth.
    StartCoroutine(Movement(GentryOnePicker, MovementCoords.GentryPickerStart, gentryspeed)); 
    yield return null;
}

private IEnumerator Movement(GameObject toMove, Vector3 position, float time)
{

    float elapsedTime = 0;
    while (elapsedTime < time)
    {
        toMove.transform.localPosition = Vector3.Lerp(toMove.transform.localPosition, position, (elapsedTime / time));
        elapsedTime += Time.deltaTime;
        yield return null;
    }
    toMove.transform.localPosition = position;
}

任何人都知道出了什么问题?

亲切的问候

1 个答案:

答案 0 :(得分:0)

我找到了方法永远不会打破while循环的答案。所以我将while语句编辑为: toMove.transform.localPosition!= position