Главный поток в Unity

366
30 августа 2017, 13:28

Существует такой код (упрощенный):

public void f()
{
    for(int i=0;i<1000000000;i++)
    {
        DrawTexture(x_, y_, id);// очень тяжелая операция
        textGameObject.text = i.ToString();
    }
}

Запускаю всё в главном потоке.

Почему у меня приложение зависает на n-ое кол секунд, а потом показывает в textGameObject.text последнее значение? Разве это все не должно выполняться поэтапно? Тяжелая операция, вывод, тяжелая операция, вывод и т.д?

Answer 1

Выполняться поэтапно не должно. Выполнение метода произойдет до конца (все 1000000000 итераций), а только затем будет выполняться следующий метод (лю) Ваш пример аналогичен ситуации, если вы наберете похожий код вне Unity3d на любом другом языке программирования. А что касается изменения текста в вашем textGameObject.text, то чтобы это происходило поэтапно, нужно разбивать по кадрам, а не итерациям цикла. При выполнении подобного кода в Unity3d в виде обычного метода (не сопрограммы) все итерации вашего цикла произойдут за 1 кадр, то есть unity не будет ничего перерисовывать пока не разберется с выполнением вашего кода. Если хотите реализовать этот код "поэтапно" смотрите в сторону сопрограмм, они же Coroutines.

READ ALSO
Автозагрузка программы WPF не работает

Автозагрузка программы WPF не работает

Не работает функция автозагрузки программыСтрока добавляется в регистр, но после включения системы не запускается

422
Простой хук клавиатуры

Простой хук клавиатуры

Находила только сложные решения, может кто подскажет самое простое:

683
Real-time Debug Android Unity

Real-time Debug Android Unity

ADb настроил, как сделать, что бы при запуске игры в редакторе, она сразу же открывала ее в телефоне, тоесть нажал Play а юнити, и игра запустилась...

373
Свойство Filter и запись расширений видео файлов в него C#

Свойство Filter и запись расширений видео файлов в него C#

У openFileDialog есть свойство Filter, как прописать туда расширения только видео файлов?

355