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

Программирование на Юнити.

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

Сообщение greatPretender 14 янв 2017, 13:48

Вечер добрый.Такая проблема, вроде всё просто, а понять не могу почему юнити намертво мгновенно зависает. Будто вгоняю её в бесконечный цикл, но проверял - нет такого. Подскажите, что не так.
-------Ситуация-----
ГО с навмэшагентом отправляется по вейпоинтам.
При подходе к каждому вейпоинту, даётся новое 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;
}

Может у меня мозг уже затуманился и я чёт не вижу?)
Последний раз редактировалось greatPretender 16 янв 2017, 10:37, всего редактировалось 1 раз.
greatPretender
Старожил
 
Сообщения: 526
Зарегистрирован: 23 сен 2015, 07:51

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

Сообщение DbIMok 14 янв 2017, 14:36

Я бы смотрел в сторону влияния curStatus = Status.FindSiege
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.6k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

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

Сообщение greatPretender 14 янв 2017, 21:43

DbIMok писал(а):Я бы смотрел в сторону влияния curStatus = Status.FindSiege

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


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6