Hoy vamos a revisar como funciona la “Herencia” en C# y Unity.
Una de las grandes fortalezas de C# (y de la programación orientada a objetos en general) es el uso de la herencia. En este tutorial, aprenderás cómo aplicar la herencia en tus scripts de Unity para crear objetos y personajes con distintos comportamientos, de forma modular, mantenible y reutilizable.
Tutorial de Unity Nivel: Principiante.
2.1 ¿Qué es la herencia en C#?
La “Herencia” en C# es una característica que permite que una clase herede propiedades y métodos de otra. Es como decir:
“Esta nueva clase es una versión extendida de otra clase.”
De esta forma, la clase base se llama clase padre o superclase, y la clase que hereda se llama clase hija o subclase.
Un ejemplo básico sería:
public class Enemigo { public int salud; public void RecibirDaño(int daño) { salud -= daño; Debug.Log("Salud restante: " + salud); } } public class EnemigoVolador : Enemigo { public void Volar() { Debug.Log("¡El enemigo está volando!"); } }
EnemigoVolador hereda de Enemigo, por lo tanto también tiene acceso a salud y RecibirDaño().
2.2 ¿Cómo lo Aplicamos en Unity?
Para comenzar a aplicar la Herencia en nuestros proyectos de Unity vamos a usar un ejemplo; primero imaginemos que estás haciendo un juego donde tienes varios tipos de enemigos:
- Enemigos comunes que caminan
- Enemigos voladores
- Enemigos que explotan al morir
En lugar de duplicar líneas de código para cada tipo de enemigo, mejor vamos a usar la herencia:
Paso 1: Clase base “Enemigo.cs”
using UnityEngine; public class Enemigo : MonoBehaviour { public int salud = 100; public virtual void Mover() { Debug.Log("El enemigo se mueve lentamente."); } public void RecibirDaño(int daño) { salud -= daño; Debug.Log("Salud restante: " + salud); if (salud <= 0) { Morir(); } } protected virtual void Morir() { Debug.Log("El enemigo ha muerto."); Destroy(gameObject); } }
virtual permite que los métodos puedan ser sobrescritos (override) por las subclases.
protected permite que las subclases accedan a ese método, pero no otros scripts externos.
Paso 2: Subclase “EnemigoVolador.cs”
using UnityEngine; public class EnemigoVolador : Enemigo { public override void Mover() { Debug.Log("El enemigo volador flota en el aire."); transform.Translate(Vector3.up * Time.deltaTime); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { RecibirDaño(50); Mover(); } } }
Paso 3: Subclase “EnemigoExplosivo.cs”
using UnityEngine; public class EnemigoExplosivo : Enemigo { protected override void Morir() { Debug.Log("¡BOOM! El enemigo explotó."); // Aquí podrías instanciar un efecto de explosión Destroy(gameObject); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { RecibirDaño(50); Mover(); } } }
Paso 4: Usarlo en Unity
- Crea un Prefab vacío y añade el script Enemigo.
- Duplica el prefab y reemplaza el script con EnemigoVolador o EnemigoExplosivo.
- Observa como cada tipo de enemigo tendrá su propio comportamiento heredado automáticamente.
- Oprime “Play” y presiona la barra espaciadora de tu teclado para que veas lo que sucede.
2.3 Ventajas de usar herencia
- Evitas duplicar código
- Cada objeto tiene su propio comportamiento personalizado
- Puedes mantener lógica común en una sola clase base (en este caso en “Enemigo”)
- Facilita escalar tu juego (en este caso con más tipos de enemigos)
Hay que tomar en cuenta que si necesitas muchos tipos de comportamientos, podrías considerar usar interfaces en lugar de herencia (por ejemplo, un sistema de comportamiento modular), o también podrías integrar ScriptableObjects para definir tipos de enemigos con diferentes datos.
2.4 Conclusión
La herencia es una herramienta poderosa para organizar el código en Unity. Te permite crear una jerarquía reutilizable y flexible, reduciendo errores y facilitando la expansión del juego.
Recuerda; usa la herencia cuando:
- Varios objetos comparten funcionalidades comunes
- Quieres sobrescribir ciertos métodos de forma específica
- Deseas mantener el código limpio y mantenible
Ejercicios.
Para reforzar lo aprendido, es necesario practicarlo, por ello intenta realizar los siguientes ejercicios:
- Usa los aprendido en la serie de tutoriales anteriores para añadir más funcionalidades al ejemplo de este tutorial.
- Crea más tipos de enemigos incluyendo métodos del ciclo de vida de Unity para que cada enemigo nuevo muestre mensajes distintos al inicio y al final de su existencia.
Este Tutorial de Unity termina aquí. Acompáñanos en el siguiente tutorial donde veremos “Encapsulamiento y Constructores”.
Siguiente Tutorial de Unity: “2.”
Unity Tutorial: “C# en Unity 2“
1. Los Métodos Clave de Unity
Ver más Tutoriales