Существует такой код (упрощенный):
public void f()
{
for(int i=0;i<1000000000;i++)
{
DrawTexture(x_, y_, id);// очень тяжелая операция
textGameObject.text = i.ToString();
}
}
Запускаю всё в главном потоке.
Почему у меня приложение зависает на n-ое кол секунд, а потом показывает в textGameObject.text последнее значение? Разве это все не должно выполняться поэтапно? Тяжелая операция, вывод, тяжелая операция, вывод и т.д?
Выполняться поэтапно не должно. Выполнение метода произойдет до конца (все 1000000000 итераций), а только затем будет выполняться следующий метод (лю) Ваш пример аналогичен ситуации, если вы наберете похожий код вне Unity3d на любом другом языке программирования. А что касается изменения текста в вашем textGameObject.text, то чтобы это происходило поэтапно, нужно разбивать по кадрам, а не итерациям цикла. При выполнении подобного кода в Unity3d в виде обычного метода (не сопрограммы) все итерации вашего цикла произойдут за 1 кадр, то есть unity не будет ничего перерисовывать пока не разберется с выполнением вашего кода. Если хотите реализовать этот код "поэтапно" смотрите в сторону сопрограмм, они же Coroutines.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей