С какой частотой будет обновляться метод в юнити, если его не вывести в FixedUpdate() и Update()
К примеру, скрипт:
void Start()
{
DoSomething();
}
public void Update()
{
//some code;
}
private static void DoSomething()
{
bool workWhile = true;
int iteration = 0;
while(workWhile)
{
iteration++;
if(iteration == 40)
{
workWhile = false;
}
}
}
В какой момент выполнения кода и с какой частой будет обновляться выполнение iteration и будет ли оно привязано к Update?
Весь код, который должен быть выполнен в одном кадре, выполняется в одном кадре. Если его слишком много и для его выполнения требуется много времени, игра жертвует FPS ради выполнения всего кода кадра. Проще говоря, виснет на X времени.
Start() ПОЛНОСТЬЮ выполняется в первом кадре, после появления объекта. Так как в старте вызывается DoSomething(), то он тоже выполнится в одном кадре полностью. В вашем случае серьезного зависания игры не произойдет, потому что 40 простейших итераций цикла выполнятся быстро, но если вы попробуете вместо 40 поставить, ну, не знаю, миллиончик, то появиться небольшая задержка. Новый кадр не наступит, пока не выполнится весь код из предыдущего. Если вы в методе doSomething сделаете что-то подобное:
private static void DoSomething()
{
bool workWhile = true;
while(workWhile)
{
// Какой-то код
}
}
То есть бесконечный цикл, игра зависнет полностью, так как кадр никогда не закончится (скорее всего, вам придется закрывать юнити через диспетчер задач).
...будет ли оно привязано к Update?
Повторюсь, что выполнение кода не связано с Update, а выполняется в одном кадре.
FixedUpdate() и Update()
Хочу также обратить ваше внимание на то, что FixedUpdate используется при работе с физикой (Rigidbody), а Update со всем остальным. Они друг от друга в целом не зависят. Обычно вызывается реже.
Подробнее можно почитать тут
Сборка персонального компьютера от Artline: умный выбор для современных пользователей