Вот вариант ответа Javad_Amiry (кстати, я + 1):
public static void Unused<T>(this T value) { }
Поскольку это метод расширения, вы можете вызывать его из любого места, используя следующий синтаксис:
foreach (object o in MyFunc())
o.Unused();
Теперь, на всякий случай, если кто-то задается вопросом, я попытался добавить [Conditional("NEVER_COMPILE_ME")]
над ним, но, к сожалению, это вызывает предупреждение.
Кстати, по моему опыту сUnity, yield return null
совсем не убивает сопрограмму.Но ваш код, по сути, является занятым ожиданием, потому что вы не предоставляете сопрограмму для запуска Unity - вы запускаете ее самостоятельно.С вашим кодом, WaitForFixedUpdate
объект, который вы сконструировали, просто проходит как o
(или null
делает), и вы игнорируете его и снова вращаетесь;Единство никогда этого не видит.Если вы хотите, чтобы Unity WaitForFixedUpdate
или что-то еще, вы должны дать ему контроль над сопрограммой, позвонив по номеру StartCoroutine(MyFunc())
.Это метод экземпляра в MonoBehaviour
, и сопрограмма будет работать до конца, пока MonoBehaviour
остается включенным.Надеюсь, это прояснит:)
РЕДАКТИРОВАТЬ - Я только что заметил, что вы сказали, что сам 'foreach' запускается внутри сопрограммы.В этом случае вы можете сделать это:
var subCoroutine = StartCoroutine(MyFunc());
yield return subCoroutine;
или эквивалентную однострочную версию:
yield return StartCoroutine(MyFunc());
Это скажет Unity дождаться завершения другой сопрограммы, прежде чем продолжитьс этой сопрограммой.
Или вы можете сделать это, если вам нужен немного более низкий уровень:
foreach (object o in MyFunc())
yield return o;