В Unity у нас есть некоторые специальные вещи для сопрограмм, которые являются дополнительными к обычному C #.
например, мы можем использовать
yield return WaitForSeconds(5.f);
чтобы сопрограмма подождала 5 секунд, прежде чем продолжить.
Что делать yield return false;
и yield return true;
делать?
yield return true
делает что-то особенное. Ноyield return null
просто делает паузу для кадра, так что я подозреваю, что этоyield return false
имеет точно такой же эффект (также,yield return 0
поскольку 0 ложныхif (0)
илиif (null)
, в отличие от C и C ++.yield return 0
работает; по- видимому , из-за причин MLM объяснилyield
Ключевое слово было вокруг , так как , по крайней мере C # 2.0. Все, что делает Unity, это вызывает его сопрограмму и обрабатывает сгенерированный итератор и возвращаемые из него значения таким образом, что вы можете вызвать неблокирующие задержки при выполнении вашего кода.WaitForSeconds
не объявлено. Как только вы объявляете вызываемый метод,WaitForSeconds
который принимает аргумент float и возвращает тип элемента перечисления, которое вы реализуете, он снова компилируется. Следовательно,yield
не является особенным для Unity. Во всяком случае, этотWaitForSeconds
метод является особенным для Unity, но даже тогда он не расширяет язык C #, а просто является дополнительным методом, который был написан с использованием стандартного C #.Ответы:
Эти
WaitForEndOfFrame
и другие подобные, просто пустые функции, которые помечаютYieldInstruction
, чтобы решить, что делать в движке.Случай по умолчанию кажется
WaitForEndOfFrame
. Так что если выyield return
что-то, что не имеет особого значения, например, bool, это то же самое, что иWaitForEndOfFrame
.Похоже, нет официальной документации по этому поведению.
Обновить
Раттер прокомментировал еще один особый случай:
yield return null
Все сопрограммы Unity, в том числе
yield return null
, запускаются до визуализации фрейма, за исключениемWaitForEndOfFrame
. Вы можете найти Раттер «s удивительный ответ над на Unity Ответы объясняя это дополнительные (хорошие диаграммы включены).источник
null
иWaitForEndOfFrame
одинаковы, но на самом деле они немного отличаются , как подробно описано на странице руководства по порядку выполнения .