0

だから私はゲームオブジェクトを動かすスクリプトを持っています。ゲームオブジェクトを一度動かすとスムーズです。しかし、2 度目に動かすと、動きが非常に遅くなり、少しバギーに見えます。

移動スクリプトの最初の入力はオブジェクトで、次に移動する必要がある位置と最後のパラメータとして速度です。すべての座標は localposition に基づいています。2 番目の楽章を実行する前に待機したいので、wait を使用します。

他のオブジェクトも 2 回動かそうとしましたが、すべてのオブジェクトの動きが非常に遅くなり、バグが発生します。

これを Update で実行したくないので、コルーチンを使用します。

これが私のコードです:

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;
}

誰が何がうまくいかないのか考えていますか?

敬具

4

1 に答える 1