Execution Order of Event Functions (Orden de Ejecución de Funciones de Evento)
Atributos
Entender la Gestión Automática de Memoria
Execution Order of Event Functions (Orden de Ejecución de Funciones de Evento)
En el scripting de Unity, hay un número de funciones de evento que no son ejecutadas en el orden predeterminado como un script ejecuta. Este orden de ejecución es descrito abajo:
Editor
Reset: El reset es llamado para inicializar las propiedades de script cuando es por primera vez adjuntado al objeto y también cuando el comando Reset es utilizado.
First Scene Load (Cuando carga la primera escena)
Estas funciones son llamadas cuando la escena comienza (una para cada objeto en la escena).
Awake: Esta función siempre se llama antes de cualquier función Start y también justo después de que un prefab es instanciado. (Si un GameObject está inactivo durante el comienzo, Awake no es llamado hasta que se vuelva activo)
OnEnable: (solamente es llamado si el Objeto está activo): Esta función es llamada justo después de que el objeto es activado. Esto sucede cuando una instancia de MonoBehaviour es creada, tal como cuando un nivel es cargado o un GameObject con un componente script es instanciado.
OnLevelWasLoaded: Esta función es ejecutada para informarle al juego que un nuevo nivel ha sido cargado.
Tenga en cuenta que para todos los objetos agregados a la escena, las funciones Awake y OnEnable para todos los scripts serán llamados antes de que Start, Update, etc sean llamados en cualquiera de ellos. Naturalmente, esto no se puede lograr cuando un objeto es instanciado durante el gameplay.
Antes de la actualización del primer frame
Start: Start es llamado antes de la primera actualización de frame solo si la instancia del script está activada.
Para objetos agregados a la escena, la función Start será llamada en todos los scripts antes que Update , etc sean llamadas para cualquier de ellos. Naturalmente, esto no puede suceder cuando un objeto es instanciado durante gameplay.
Entre frames
OnApplicationPause: Esto es llamado al final del frame dónde la pausa es detectada, efectivamente entre actualizaciones de frame normales. Un frame extra será despachado después de que OnApplicationPause sea llamado para permitirle al juego mostrarle gráficas que indican el estado pausado.
Update Order (Orden de Actualización)
Cuando usted hace seguimiento de la lógica de juego y las interacciones, animaciones, posiciones de cámara, etc., hay unos eventos diferentes que usted puede utilizar. El patrón común es realizar la mayoría de tareas dentro de la función Update , pero también hay otras funciones que usted puede utilizar.
FixedUpdate:FixedUpdate a veces es más llamada que Update. Puede ser llamada varias veces por frame, si la velocidad de frame es baja y puede no ser llamada entre frames en absoluto si la velocidad de frame es alta. Todos los cálculos de física y actualizaciones ocurren inmediatamente después de FixedUpdate. Cuando aplique cálculos de movimiento dentro de FixedUpdate, usted no necesita multiplicar sus valores por Time.deltaTime. Esto se debe a que FixedUpdate en un temporizador fiable, independiente de la velocidad de frames.
Update:Update se llama una vez por frame. Es la función principal para las actualizaciones de frames.
LateUpdate:LateUpdate es llamada una vez por frame, después de que Update haya finalizado. Cualquier cálculo que sea realizado en Update será completado cuando LateUpdate comience. Un uso común para LateUpdate sería una cámara de tercera persona que sigue. Si usted hace que su personaje se mueva y gire, Update, usted puede realizar todos los cálculos de movimientos de cámara y rotación en LateUpdate. Esto asegurara que el personaje haya sido movido completamente antes de que la cámara haga un seguimiento a su posición.
Rendering (Renderización)
OnPreCull: Llamado antes de que la cámara corte (culls) la escena . Culling determina qué objetos son visibles a la cámara. OnPreCull es llamado justo antes de que el culling tome lugar.
OnBecameVisible/OnBecameInvisible: Llamado cuando un objeto se vuelve visible/invisible a cualquier cámara.
OnWillRenderObject: Se llama una vez por cada cámara si el objeto es visible.
OnPreRender: Llamado antes de que la cámara comience a renderizar la escena.
OnRenderObject: Llamado después de que toda la renderización regular de la escena es hecha. Usted puede utilizar la clase GL o Graphics.DrawMeshNow para dibujar una geometría personalizada en este punto.
OnPostRender: Llamado después de que una cámara finalice de renderizar la escena.
OnRenderImage: Llamado después de que la renderización de escena esté completa para permitirle un post-procesamiento de la imagen de la pantalla, ver ImageEffects.
OnGUI: Llamado múltiples veces por frame en respuesta a los eventos GUI. El Layout y los eventos de Repaint son procesado primero, seguidos por un evento de Layout y de teclado/mouse para cada evento de input.
OnDrawGizmos Utilizado para dibujar Gizmos en la vista de escena por propósitos de visualización.
Coroutines (Corrutinas)
Actualizaciones normales de Coroutines (corrutinas) son ejecutadas después del return que hace la función Update. Una coroutine es una función que puede suspender su ejecución (yield) hasta que la YieldInstruction finalice.
Diferentes usos de Coroutines:
yield La coroutine va a continuar después de que todas las funciones Update hayan sido llamadas en el siguiente frame.
yield WaitForSeconds Continúa después de un retraso de un tiempo específico, después de que todas las funciones Update hayan sido llamadas para el frame
yield WaitForFixedUpdate Continua después de que todos los FixedUpdate hayan sido llamadas en todos los scripts.
yield WWW Continúa después de que una descarga WWW haya sido completada
yield StartCoroutine Encadenada la coroutine, y va a esperar para que la coroutine MyFunc haya sido completado primero.
Cuando el Objeto es Destruido
OnDestroy: Esta función es llamada después de que todas las actualizaciones de frame para el último frame de la existencia del objeto (el objeto puede ser destruido en respuesta a Object.Destroy o al cerrarse la escena).
Cuando Salga
Estas funciones son llamadas en todos los objetos activos en su escena:
OnApplicationQuit: Esta función es llamada en todos los game objects antes de que se salga de la aplicación. En el editor es llamada cuando el usuario para el modo de reproducción. En el web player (Reproductor web) es llamada cuando la vista de web es cerrada.
OnDisable: Esta función es llamada cuando el comportamiento se vuelve inactivo o deshabilitado.
Diagrama de Flujo del Ciclo de Vida de Script
El siguiente diagrama resume el orden y repetición de funciones de evento durante la vida de script.