Страница 1 из 1

Navmesh, coroutine, while - зависает юнити [РЕШЕНО]

СообщениеДобавлено: 14 янв 2017, 13:48
greatPretender
Вечер добрый.Такая проблема, вроде всё просто, а понять не могу почему юнити намертво мгновенно зависает. Будто вгоняю её в бесконечный цикл, но проверял - нет такого. Подскажите, что не так.
-------Ситуация-----
ГО с навмэшагентом отправляется по вейпоинтам.
При подходе к каждому вейпоинту, даётся новое setDestination и вызывается корутина, для проверки дошёл/нет.
Когда ГО подходит к очередному вейпоинту - срабатывает if через else и ГО получает следующий вейпоинт. Т.е. if -работает.
Срабатывают дебаги Debug.Log ("Path has"); Debug.Log ("<10"); Debug.Log ("!=");
------Проблема------
Но когда подходим к последней точке ,те. numbPoint == (spwn.dictWays[numbRoute].Count - 1),
происходит Зависон прям в момент проверки при подходе ГО к последней точке.
Т.е. Debug.Log ("before siege"); - не срабатывает.
Но ведь должен. Не понимаю, дебаг не успевают вывезтись на экран или же инструкции до них даже не доходит.
Синтаксис:
Используется csharp
       
IEnumerator MoveTo (Vector3 vect){
        yield return null;
        yield return null;
        navAgent.SetDestination(vect);
        yield return null;
        isBusy = true;
        while (!navAgent.hasPath) {                    // ждем просчета пути, т.е. когда navMesh просчитает путь
                yield return null;
                yield return null;
        }
        Debug.Log ("Path has");
        while (navAgent.hasPath) {                    // ждем окончания движения, когда юнит приедет в точку назначения
                yield return null;
                yield return null;
                while (navAgent.remainingDistance > 10){    // ждём когда до точки будет < 10
                        yield return null;
                        yield return null;
                }
                yield return null;
                yield return null;
                Debug.Log ("<10");
                if (numbPoint == (spwn.dictWays[numbRoute].Count - 1)){
                        Debug.Log ("before siege");
                        curStatus = Status.FindSiege;
                        yield break;
                } else {
                        Debug.Log ("!=");
                        curStatus = Status.FindRoute;
                        yield break;
                }
        }
        yield return null;
        yield return null;
        isBusy = false;
        yield break;
}

Может у меня мозг уже затуманился и я чёт не вижу?)

Re: Navmesh, coroutine, while - зависает юнити

СообщениеДобавлено: 14 янв 2017, 14:36
DbIMok
Я бы смотрел в сторону влияния curStatus = Status.FindSiege

Re: Navmesh, coroutine, while - зависает юнити

СообщениеДобавлено: 14 янв 2017, 21:43
greatPretender
DbIMok писал(а):Я бы смотрел в сторону влияния curStatus = Status.FindSiege

Да. Так и есть. Потом уже позже обнаружил, что хоть дебаг не выводит, НО curStatus = Status.FindRoute в инспекторе изменяется на Status.FindSiege.
Т.е. дебаг просто выводится отложенно, через какое-то время, а выполнение кода продолжилось и зависло уже в последующих строчках кода.
Странно, 3 вечера тратишь на то, чтобы понять где ошибка. Обращаешься на форум и вот тока опубликовав вопрос, сам вдруг натыкаешься на ошибку которую ищешь ))) хех