En Unity, tenemos algunas cosas especiales para las rutinas que son adicionales al C # normal.
por ejemplo, podemos usar
yield return WaitForSeconds(5.f);
para tener una rutina espere 5 segundos antes de continuar.
¿Qué hacer yield return false;y yield return true;hacer?

yield return truehace algo especial. Peroyield return nullsimplemente hace una pausa para un cuadro, por lo que sospecho queyield return falsetiene exactamente el mismo efecto (tambiényield return 0dado que 0 falsos nulos son todos iguales bajo el capó)if (0)oif (null), a diferencia de C y C ++.yield return 0funciona; aparentemente por la razón que MLM explicóyieldpalabra clave ha existido desde al menos C # 2.0. Todo lo que Unity hace es llamarlo de rutina y manejar el iterador generado y los valores devueltos por él de manera que pueda causar retrasos sin bloqueo en la ejecución de su código.WaitForSecondsno se declara. Tan pronto como declare un método llamadoWaitForSecondsque tome un argumento flotante y que devuelva el tipo de elemento de la enumeración que está implementando, se volvería a compilar. Por lo tanto,yieldno es especial para la Unidad. En todo caso, elWaitForSecondsmétodo es especial para Unity, pero aun así, no extiende el lenguaje C #, sino que es simplemente un método adicional que se escribió utilizando C # estándar.Respuestas:
El
WaitForEndOfFramey otros similares son funciones en blanco que etiquetanYieldInstructionpara decidir qué hacer en el motor.El caso predeterminado parece ser
WaitForEndOfFrame. Entonces, siyield returnalgo que no tiene un significado especial, como un bool, es lo mismo queWaitForEndOfFrame.No parece haber ninguna documentación oficial sobre este comportamiento.
Actualizar
Rutter comentó sobre otro caso especial:
yield return nullTodas las rutinas de Unity
yield return null, incluidas las ejecutadas antes de que se procese el marco, exceptoWaitForEndOfFrame. Puede encontrar la increíble respuesta de rutter en Respuestas de Unity que lo explican más detalladamente (se incluyen diagramas bonitos).fuente
nullyWaitForEndOfFrameson iguales, pero en realidad son ligeramente diferentes , como se detalla en la página del manual de órdenes de ejecución .