🎮 UnityDocs

Clases y objetos en C#

El pilar de la programación orientada a objetos: qué es una clase, qué es un objeto, campos, métodos, constructores y propiedades. Y cómo se relaciona con los MonoBehaviour de Unity.

📄 ArtículoPrincipiante✅ RevisadoUnity 6.0 LTSActualizado 2026-07-15
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 8 min · ⌨️ Práctica 25 min

Clase vs objeto#

Una clase es un molde: describe qué datos y qué comportamientos tendrá algo. Un objeto es una copia concreta hecha a partir de ese molde.

Analogía: la clase "Enemigo" es el plano; cada goblin en pantalla es un objeto creado con ese plano, con sus propios valores.

C#
public class Enemigo
{
    // Campos: los datos de cada enemigo
    public string nombre;
    public int vida = 100;

    // Método: un comportamiento
    public void RecibirDaño(int cantidad)
    {
        vida -= cantidad;
        if (vida <= 0)
            Morir();
    }

    void Morir()
    {
        Debug.Log(nombre + " ha muerto");
    }
}

Crear objetos con new#

C#
Enemigo goblin = new Enemigo();   // crea un objeto (una instancia)
goblin.nombre = "Goblin";
goblin.RecibirDaño(30);           // ahora goblin.vida = 70

Enemigo orco = new Enemigo();     // otro objeto, independiente
orco.vida = 200;                  // el goblin no se entera

Cada objeto tiene su propia copia de los campos: cambiar el orco no afecta al goblin.

Constructores#

Un constructor es un método especial que se ejecuta al crear el objeto, para dejarlo listo. Lleva el nombre de la clase:

C#
public class Enemigo
{
    public string nombre;
    public int vida;

    // Constructor
    public Enemigo(string nombre, int vida)
    {
        this.nombre = nombre;   // 'this' distingue el campo del parámetro
        this.vida = vida;
    }
}

// Uso: se le pasan los valores al crearlo
Enemigo jefe = new Enemigo("Dragón", 500);
En Unity NO uses el constructor de un MonoBehaviour

Esto vale para clases normales de C#. Pero los MonoBehaviour (los scripts que pegas a GameObjects) no se crean con new ni usan constructor: los instancia Unity. Su "constructor" es el método Awake. Ver el ciclo de vida.

Propiedades: acceso controlado#

Una propiedad parece un campo pero puede controlar la lectura/escritura. Sirve para exponer datos sin dejar que se modifiquen sin control:

C#
public class Jugador
{
    // Se lee desde fuera, pero solo la propia clase la cambia
    public int Vida { get; private set; } = 100;

    // Propiedad con lógica
    public bool EstaVivo => Vida > 0;   // solo lectura, calculada

    public void RecibirDaño(int d)
    {
        Vida = Mathf.Max(0, Vida - d);
    }
}
Campo vs propiedad

Un campo es una variable simple. Una propiedad ({ get; set; }) es un envoltorio que permite validar, calcular o restringir el acceso. Regla práctica: expón datos como propiedades (a menudo get público, set privado) y deja los campos como detalle interno.

Relación con Unity#

Cada script que arrastras a un GameObject es una clase (que hereda de MonoBehaviour). Cuando pones ese script en un objeto, Unity crea un objeto de esa clase. Por eso dos enemigos con el mismo script tienen cada uno sus propios valores: son dos objetos del mismo molde. Esto conecta directamente con GameObjects y Componentes.

Errores frecuentes#

  • Confundir la clase (el molde) con el objeto (la instancia).
  • Esperar que cambiar un objeto afecte a los demás (cada uno es independiente).
  • Usar new para crear un MonoBehaviour (nunca; lo hace Unity).
  • Hacer todos los campos public en vez de exponer propiedades controladas.

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

Una clase es un molde con campos (datos) y métodos (comportamientos); un objeto es una instancia concreta creada con new, con sus propios valores. Los constructores inicializan y las propiedades dan acceso controlado. En Unity, tus scripts son clases que hereda de MonoBehaviour e inicializan en Awake, no con new. Siguiente: herencia e interfaces.

Fuentes y para profundizar