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 true
hace algo especial. Peroyield return null
simplemente hace una pausa para un cuadro, por lo que sospecho queyield return false
tiene exactamente el mismo efecto (tambiényield return 0
dado que 0 falsos nulos son todos iguales bajo el capó)if (0)
oif (null)
, a diferencia de C y C ++.yield return 0
funciona; aparentemente por la razón que MLM explicóyield
palabra 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.WaitForSeconds
no se declara. Tan pronto como declare un método llamadoWaitForSeconds
que 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,yield
no es especial para la Unidad. En todo caso, elWaitForSeconds
mé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
WaitForEndOfFrame
y otros similares son funciones en blanco que etiquetanYieldInstruction
para decidir qué hacer en el motor.El caso predeterminado parece ser
WaitForEndOfFrame
. Entonces, siyield return
algo 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 null
Todas 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
null
yWaitForEndOfFrame
son iguales, pero en realidad son ligeramente diferentes , como se detalla en la página del manual de órdenes de ejecución .