Ciclo de vida de MonoBehaviour: Awake, Start, Update y FixedUpdate

Aprende cuándo se ejecuta cada método del ciclo de vida para colocar la lógica correcta en el momento correcto.

Awake se usa para inicialización temprana de referencias internas del objeto antes de empezar a jugar.

Start se ejecuta justo antes del primer frame y es ideal para preparar estado inicial que depende de la escena cargada.

Update corre cada frame y debe contener lógica de juego dependiente de entrada o tiempo visual.

FixedUpdate corre en pasos fijos y es el lugar correcto para fuerzas y lógica de física.

  • No es teoría abstracta: el orden define si tu gameplay funciona o se rompe.
  • Cuando el objeto se activa, Unity llama primero a `Awake()` y después a `Start()`. Ambos se ejecutan una vez, pero en momentos distintos del arranque.
  • Durante la simulación, `Update()` se ejecuta cada frame, mientras que `FixedUpdate()` se ejecuta en intervalos fijos para mantener estabilidad en cálculos físicos.
  • Si mezclas lógica de física en `Update()` o inicialización crítica en el método equivocado, aparecen comportamientos inconsistentes difíciles de depurar.
  • Awake: inicialización temprana del objeto.

Orden real de ejecución

No es teoría abstracta: el orden define si tu gameplay funciona o se rompe.

Cuando el objeto se activa, Unity llama primero a `Awake()` y después a `Start()`. Ambos se ejecutan una vez, pero en momentos distintos del arranque.

Durante la simulación, `Update()` se ejecuta cada frame, mientras que `FixedUpdate()` se ejecuta en intervalos fijos para mantener estabilidad en cálculos físicos.

Si mezclas lógica de física en `Update()` o inicialización crítica en el método equivocado, aparecen comportamientos inconsistentes difíciles de depurar.

  • Awake: inicialización temprana del objeto.
  • Start: preparación al comenzar la simulación.
  • Update: lógica por frame (input y estado visual).
  • FixedUpdate: lógica de física y fuerzas.

Qué va en cada método (y qué no)

Asignar bien la responsabilidad ahorra tiempo de depuración.

En `Awake()` cachea componentes (`GetComponent`) y prepara dependencias internas. Evita operaciones pesadas o que dependan de orden global de escena.

En `Start()` inicializa valores de juego visibles para el jugador, suscripciones de eventos y estado inicial de UI si aplica.

En `Update()` procesa input y timers visuales. En `FixedUpdate()` aplica movimiento físico con `Rigidbody` para evitar jitter y diferencias por FPS.

Errores frecuentes de timing

La mayoría de bugs en principiantes son de momento de ejecución, no de sintaxis.

Usar `GetComponent` constantemente en `Update()` provoca coste innecesario: cachea en `Awake()`.

Aplicar físicas en `Update()` produce resultados dependientes de FPS. Si la lógica usa `Rigidbody`, muévela a `FixedUpdate()`.

No asumas que `Start()` de todos los objetos se ejecuta en el orden que esperas. Si dependes de inicialización cruzada, diseña explícitamente esa dependencia.

Unity
05

Ciclo de vida de MonoBehaviour: Awake, Start, Update y FixedUpdate

Aprende cuándo se ejecuta cada método del ciclo de vida para colocar la lógica correcta en el momento correcto.

Código del tema: GameObject + Component = comportamiento

📘 Teoría

Orden real de ejecución

No es teoría abstracta: el orden define si tu gameplay funciona o se rompe.

Cuando el objeto se activa, Unity llama primero a `Awake()` y después a `Start()`. Ambos se ejecutan una vez, pero en momentos distintos del arranque.

Durante la simulación, `Update()` se ejecuta cada frame, mientras que `FixedUpdate()` se ejecuta en intervalos fijos para mantener estabilidad en cálculos físicos.

Si mezclas lógica de física en `Update()` o inicialización crítica en el método equivocado, aparecen comportamientos inconsistentes difíciles de depurar.

  • Awake: inicialización temprana del objeto.
  • Start: preparación al comenzar la simulación.
  • Update: lógica por frame (input y estado visual).
  • FixedUpdate: lógica de física y fuerzas.

Qué va en cada método (y qué no)

Asignar bien la responsabilidad ahorra tiempo de depuración.

1

En `Awake()` cachea componentes (`GetComponent`) y prepara dependencias internas. Evita operaciones pesadas o que dependan de orden global de escena.

2

En `Start()` inicializa valores de juego visibles para el jugador, suscripciones de eventos y estado inicial de UI si aplica.

3

En `Update()` procesa input y timers visuales. En `FixedUpdate()` aplica movimiento físico con `Rigidbody` para evitar jitter y diferencias por FPS.

Script base con ciclo de vida ordenado
using UnityEngine;

public class LifecycleDemo : MonoBehaviour
{
    private Rigidbody rb;
    public float fuerza = 6f;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
        Debug.Log("Awake: referencias listas");
    }

    void Start()
    {
        Debug.Log("Start: estado inicial configurado");
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Debug.Log("Update: input detectado");
        }
    }

    void FixedUpdate()
    {
        rb.AddForce(Vector3.forward * fuerza * Time.fixedDeltaTime, ForceMode.VelocityChange);
    }
}

Errores frecuentes de timing

La mayoría de bugs en principiantes son de momento de ejecución, no de sintaxis.

1

Usar `GetComponent` constantemente en `Update()` provoca coste innecesario: cachea en `Awake()`.

2

Aplicar físicas en `Update()` produce resultados dependientes de FPS. Si la lógica usa `Rigidbody`, muévela a `FixedUpdate()`.

3

No asumas que `Start()` de todos los objetos se ejecuta en el orden que esperas. Si dependes de inicialización cruzada, diseña explícitamente esa dependencia.

🧪 Aprende probando

Ejemplo Ejemplo guiado Ordena mentalmente el flujo y adapta el script para separar input de física.

🏁 Retos

Reto Reto práctico Escribe un script breve que incluya Awake y Update con mensajes de debug diferenciados.

🧰 Recursos

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .