new WaitForSeconds(1f) внутри цикла создаёт новый объект на heap при каждой итерации. Раз в секунду — новый объект, GC копит мусор.Б: объект создаётся один раз в поле класса, дальше каждый yield передаёт один и тот же экземпляр. Ноль аллокаций в цикле.
В:
yield return null приостанавливает корутину до следующего кадра без каких-либо аллокаций.Паттерн кэшировния работает для всех встроенных yield-инструкций:
private readonly WaitForSeconds _wait1sec = new WaitForSeconds(1f);
private readonly WaitForEndOfFrame _waitFrame = new WaitForEndOfFrame();
private readonly WaitForFixedUpdate _waitFixed = new WaitForFixedUpdate();
Мелочь, но на горячих корутинах которые рестартуют часто — ощутимо.
#задачка #unity #оптимизация