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.

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. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com