Чи має "return return false;" має особливе значення у скриптах Unity3d C #?


17

У 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 помилкових нульових
значень

@jhocking "оскільки 0 помилкових нульових значень все одно під кришкою" Чому це має значення? C # - це дуже сильно набрана мова, тому більшість часу, як щось виглядає "під капотом", не має значення. Наприклад, ви не можете просто зробити if (0)або if (null), в відміну від C і C ++.
svick

знизати плечима, то це не має значення. все, що я знаю, це те, що yield return 0працює; Мабуть, через причину MLM пояснив
джак

2
Це не є додатковим до звичайного C #. yieldКлючове слово було навколо , так як , по крайней мере C # 2.0. Все, що має Unity, це викликати його програмою та обробляти генерований ітератор та значення, повернені з нього, таким чином, що ви можете спричинити незаблокування затримок у виконанні вашого коду.
АБО Mapper

1
@Almo: Це просто тому WaitForSeconds, що не оголошено. Як тільки ви оголосите метод, який називається, WaitForSecondsякий бере аргумент float і який повертає тип елемента перерахунку, який ви реалізуєте, він буде компілюватися знову. Отже, yieldне є особливим для Єдності. Якщо що-небудь, WaitForSecondsметод є особливим для Unity, але навіть тоді він не розширює мову C #, а є просто додатковим методом, який був написаний за допомогою стандартного C #.
АБО Mapper

Відповіді:


19

Єдині можливі значення урожайності, які планувальник розуміє:

  • Класи , похідні від YieldInstruction( WaitForSeconds, WaitForEndOfFrame, WaitForFixedUpdate, AssetBundleCreateRequest, AssetBundleRequestі співпрограми
  • WWWоб'єкт
  • "будь-яке інше значення", яке не є одним із перерахованих вище.

Якщо отримано "будь-яке інше значення" (яке включає "null") значення рядка будь-якого іншого базового типу, такого як int, bool , ... або посилання на довільний об'єкт, який не є одним із згаданих вище, планувальник буде "запланувати" підпрограму для наступного кадру .

- Відповідь Bunny83: Видатний член у відповідях Unity

WaitForEndOfFrameІ інші подібні, тільки порожні функції, тег YieldInstructionдля того , щоб вирішити , що робити в двигуні.

Вигляд за замовчуванням здається таким WaitForEndOfFrame. Тож якщо ви yield returnщось, що не має особливого значення, наприклад, bool, це те саме, що WaitForEndOfFrame.

Здається, немає жодної офіційної документації щодо такої поведінки.


Оновлення

rutter прокоментував ще один особливий випадок:yield return null

Усі Unity Coroutines, включаючи yield return null, виконувати перед кадром, за винятком, крім WaitForEndOfFrame. Ви можете знайти Раттер «s дивовижний відповідь над на Unity Відповіді пояснюючи це додаткові (хороші діаграми включені).


6
Загальноприпустити, що поступаються nullі WaitForEndOfFrameоднакові, але вони насправді трохи відрізняються , як це детально описано на сторінці посібника з виконання доручень.
рут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.