No Unity, temos algumas coisas especiais para corotinas adicionais ao C # normal.
por exemplo, podemos usar
yield return WaitForSeconds(5.f);
para que uma corotina aguarde 5 segundos antes de continuar.
O que fazer yield return false;
e yield return true;
fazer?
yield return true
faz algo especial. Masyield return null
simplesmente faz uma pausa para um quadro, então eu suspeito queyield return false
tem exatamente o mesmo efeito (tambémyield return 0
desde 0 false nulo são todos iguais sob o capô)if (0)
ouif (null)
, ao contrário de C e C ++.yield return 0
funciona; aparentemente por causa da razão MLM explicouyield
palavra - chave existe desde pelo menos C # 2.0. Tudo o que o Unity faz é chamá-lo de rotina e manipula o iterador gerado e os valores retornados a partir de uma maneira que você pode causar atrasos sem bloqueio na execução do seu código.WaitForSeconds
não é declarado. Assim que você declarar um método chamadoWaitForSeconds
que recebe um argumento de flutuação e retorna o tipo de elemento da enumeração que está implementando, ele será compilado novamente. Portanto,yield
não é especial para a Unidade. De qualquer forma, oWaitForSeconds
método é especial para o Unity, mas, mesmo assim, não estende a linguagem C #, mas é simplesmente um método extra que foi escrito usando o C # padrão.Respostas:
Os
WaitForEndOfFrame
e outros semelhantes, são apenas funções em branco que marcam osYieldInstruction
itens para decidir o que fazer no mecanismo.O caso padrão parece ser
WaitForEndOfFrame
. Então, se você temyield return
algo que não tem um significado especial, como um bool, é o mesmo queWaitForEndOfFrame
.Parece não haver nenhuma documentação oficial sobre esse comportamento.
Atualizar
rutter comentou sobre outro caso especial:
yield return null
Todas as Unity Coroutines
yield return null
, incluindo , são executadas antes do quadro renderizar, excetoWaitForEndOfFrame
. Você pode encontrar a resposta impressionante de rutter nas respostas do Unity, explicando isso mais adiante (belos diagramas incluídos).fonte
null
eWaitForEndOfFrame
são os mesmos, mas eles são realmente um pouco diferente , conforme detalhado na ordem de execução página manual.