2017-02-15 34 views
0

Итак, у меня есть сценарий для перемещения объектов игры вокруг. Когда я двигаю gameObject один раз, он плавный. Но когда я двигаю его во второй раз, движение очень медленное и выглядит abit buggy.Unity GameObject не работает ровно, когда перемещается во второй раз

Первый вход в сценарии движения - это объект, затем позиция, в которую ему нужно перейти, и скорость в качестве последнего параметра. Все координаты основаны на локальном расположении. Я использую wait, потому что хочу подождать, прежде чем выполнять второе движение.

Я попытался переместить другие объекты дважды, но все они в конечном итоге двигаются очень медленно/багги.

Я не хочу запускать это в 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; 
} 

Любой идея, что происходит не так?

Сердечные приветы

+1

Можете ли вы подтвердить, что один Movement-Coroutine закончил, прежде чем вы начнете новый? В противном случае вы будете бороться за движение, что вызовет странное, негладкое и лаконичное движение. – Maakep

+0

Можете ли вы использовать возврат возврата StartCoroutine вместо ожидания секунд между ними? –

+0

Кажется, что coroutine не останавливается. С отладчиком я заметил, что он никогда не доходит до утверждения после возврата доходности –

ответ

0

Я нашел ответ метод никогда не ломается из цикла. Поэтому я отредактировал оператор while: toMove.transform.localPosition! = Position

+0

Привет, Не сравнивайте 'Vector3'. Я слишком ленив, чтобы объяснить, почему ваш исходный код с циклом while является подходящим способом для этого. Просто нужно немного изменить. – Programmer