Arquitectura SOLID: responsabilidad única en Unity

Aplica SRP para dividir scripts gigantes en componentes claros, mantenibles y fáciles de testear dentro de tu juego.

El principio de Responsabilidad Única (SRP) dice que cada clase debe tener un único motivo para cambiar.

En Unity, un error común es crear un `PlayerController` que gestiona input, movimiento, audio, UI y guardado a la vez.

Separar responsabilidades reduce bugs en cascada y acelera la iteración cuando cambias una mecánica concreta.

Este enfoque conecta directamente con `contenido.md`, que propone separar `PlayerInput`, `PlayerMovement` y `PlayerAudio`.

  • Si una clase toca demasiados sistemas, ya tienes una señal de deuda técnica.
  • Un script dios acumula responsabilidades: lee input, mueve personaje, dispara audio, actualiza UI y controla checkpoints.
  • Cuando cambias una parte, rompes otra. Ese acoplamiento hace que corregir errores sea cada vez más caro.
  • El objetivo del refactor con SRP es aislar decisiones para que cada módulo sea simple de entender y mantener.
  • Una clase = una responsabilidad principal.

Detectar el script dios

Si una clase toca demasiados sistemas, ya tienes una señal de deuda técnica.

Un script dios acumula responsabilidades: lee input, mueve personaje, dispara audio, actualiza UI y controla checkpoints.

Cuando cambias una parte, rompes otra. Ese acoplamiento hace que corregir errores sea cada vez más caro.

El objetivo del refactor con SRP es aislar decisiones para que cada módulo sea simple de entender y mantener.

  • Una clase = una responsabilidad principal.
  • Menos acoplamiento entre sistemas.
  • Mayor velocidad para depurar y evolucionar.

Separar Input, Movimiento y Audio

Divide por comportamiento funcional, no por conveniencia temporal.

`PlayerInput` interpreta controles y publica intención (moverse, saltar, atacar).

`PlayerMovement` transforma esa intención en velocidad, colisiones y desplazamiento físico.

`PlayerAudio` escucha eventos y reproduce sonidos sin mezclar lógica de física o estado del jugador.

Refactor seguro en proyectos vivos

Refactoriza en pasos cortos y verificables para no romper gameplay.

Empieza extrayendo una sola responsabilidad (por ejemplo audio) y valida que todo siga funcionando en escena real.

Usa commits pequeños por cada extracción de clase para poder revertir rápido si aparece regresión.

Define contratos simples entre componentes (propiedades públicas o eventos) para minimizar dependencias ocultas.

Unity
15

Arquitectura SOLID: responsabilidad única en Unity

Aplica SRP para dividir scripts gigantes en componentes claros, mantenibles y fáciles de testear dentro de tu juego.

Código del tema: GameObject + Component = comportamiento

📘 Teoría

Detectar el script dios

Si una clase toca demasiados sistemas, ya tienes una señal de deuda técnica.

Un script dios acumula responsabilidades: lee input, mueve personaje, dispara audio, actualiza UI y controla checkpoints.

Cuando cambias una parte, rompes otra. Ese acoplamiento hace que corregir errores sea cada vez más caro.

El objetivo del refactor con SRP es aislar decisiones para que cada módulo sea simple de entender y mantener.

  • Una clase = una responsabilidad principal.
  • Menos acoplamiento entre sistemas.
  • Mayor velocidad para depurar y evolucionar.

Separar Input, Movimiento y Audio

Divide por comportamiento funcional, no por conveniencia temporal.

1

`PlayerInput` interpreta controles y publica intención (moverse, saltar, atacar).

2

`PlayerMovement` transforma esa intención en velocidad, colisiones y desplazamiento físico.

3

`PlayerAudio` escucha eventos y reproduce sonidos sin mezclar lógica de física o estado del jugador.

Ejemplo básico de división por responsabilidad
using UnityEngine;

public class PlayerInput : MonoBehaviour
{
    public float Horizontal { get; private set; }

    void Update()
    {
        Horizontal = Input.GetAxisRaw("Horizontal");
    }
}

public class PlayerMovement : MonoBehaviour
{
    public Rigidbody rb;
    public PlayerInput input;
    public float speed = 6f;

    void FixedUpdate()
    {
        rb.velocity = new Vector3(input.Horizontal * speed, rb.velocity.y, 0f);
    }
}

public class PlayerAudio : MonoBehaviour
{
    public AudioSource source;
    public AudioClip jumpClip;

    public void PlayJump()
    {
        source.PlayOneShot(jumpClip);
    }
}

Refactor seguro en proyectos vivos

Refactoriza en pasos cortos y verificables para no romper gameplay.

1

Empieza extrayendo una sola responsabilidad (por ejemplo audio) y valida que todo siga funcionando en escena real.

2

Usa commits pequeños por cada extracción de clase para poder revertir rápido si aparece regresión.

3

Define contratos simples entre componentes (propiedades públicas o eventos) para minimizar dependencias ocultas.

🧪 Aprende probando

Ejemplo Ejemplo guiado Toma un controlador monolítico y separa primero la parte de audio en una clase dedicada.

🏁 Retos

Reto Reto práctico Propón una separación mínima en tres clases independientes para input, movimiento y audio.

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