3. Encapsulamiento y Constructores

Hoy vamos a conocer en que consisten el “Encapsulamiento y los Constructores” en C# y Unity.

Uno de los pilares más importantes de la programación orientada a objetos (POO) es el encapsulamiento, y junto con él, los constructores que permiten estructurar tus clases de manera limpia, segura y profesional.

En este tutorial aprenderás:

  • Qué es el encapsulamiento
  • Qué son los constructores
  • Cómo usarlos correctamente en Unity
  • Ejemplos prácticos con personajes, enemigos y lógica de juegos
Tutorial de Unity Nivel: Principiante.

3.1 ¿Qué es el encapsulamiento?

Encapsulamiento es el principio que consiste en ocultar el estado interno de un objeto (sus variables) y proteger su acceso, exponiendo solo lo necesario.

En otras palabras, el Encapsulamiento es “Controlar cómo se accede y modifica la información interna de un objeto.”

Como ya habrás notado, en esta serie de tutoriales y en los anteriores ya hemos tratado este tema de proteger a nuestro código para que solo algunos o ninguno tenga acceso a el y lo pueda modificar. Y esto lo logramos mediante  los “Modificadores de acceso“; los cuales son:

Modificador ¿Dónde puede accederse?
public Desde cualquier parte del código
private Solo desde la misma clase
protected Desde la clase y sus subclases
internal Solo desde el mismo ensamblado (poco usado en Unity)
protected internal Desde subclases y el mismo ensamblado

Ejemplo 1: Sin encapsulamiento

public class Jugador
{
    public int salud;
}

Problema: Cualquier script puede modificar salud directamente sin control, incluso poner valores negativos.

Ejemplo 2: Con encapsulamiento usando private y propiedades

public class Jugador
{
    private int salud = 100;

    public int Salud
    {
        get { return salud; }
        private set 
        {
            salud = Mathf.Clamp(value, 0, 100); // Limita entre 0 y 100
        }
    }

    public void RecibirDaño(int daño)
    {
        Salud -= daño;
    }
}

Ahora:

  • El valor de salud está protegido internamente.
  • Solo se puede modificar desde dentro de la clase, con lógica de validación.
  • Desde otros scripts puedes leer la salud, pero no modificarla directamente.

Y de esta manera podemos ver claramente en que consiste el Encapsulamiento 🙂

3.2 ¿Y los Constructores?

Un constructor es un método especial que se ejecuta automáticamente cuando creas una instancia de una clase usando new.

Se usa para inicializar valores de una clase cuando se crea.

Ejemplo en C# normal fuera de Unity (sin MonoBehaviour)

Vamos a formar la base para un personaje:

public class Personaje
{
    public string nombre;
    public int nivel;

    // Constructor
    public Personaje(string nombre, int nivel)
    {
        this.nombre = nombre;
        this.nivel = nivel;
    }
}

Ahora, vamos a usar un constructor para crear al personaje (ojo a cuando usamos “new“):

void Start()
{
    Personaje heroe = new Personaje("Artemis", 5);
    Debug.Log("Nombre: " + heroe.nombre + ", Nivel: " + heroe.nivel);
}

Nota:

En C# de Unity o usando MonoBehaviour, no se permite usar “new” para crear componentes MonoBehaviour. En su lugar, los scripts que heredan de MonoBehaviour deben usarse como componentes y Unity los inicializa automáticamente (en otras palabras, es necesario usar el método Awake() o Start()).

Ejemplo en C# de Unity (con MonoBehaviour)

Vamos a formar la base para un personaje “Enemigo” (este script no usa MonoBehaviour):

public class EnemigoData
{
    private string nombre;
    private int salud;

    public string Nombre => nombre;
    public int Salud => salud;

    public EnemigoData(string nombre, int salud)
    {
        this.nombre = nombre;
        this.salud = Mathf.Clamp(salud, 0, 100);
    }

    public void RecibirDaño(int daño)
    {
        salud = Mathf.Max(salud - daño, 0);
    }
}

Ahora, vamos a usar un constructor para crear al personaje en un script que si usa  MonoBehaviour (ojo a cuando “Definimos al Componente” y usamos “new” dentro de “Start()“):

public class ControladorEnemigo : MonoBehaviour
{
    private EnemigoData datos;

    void Start()
    {
        datos = new EnemigoData("Goblin", 80);
        datos.RecibirDaño(30);
        Debug.Log(datos.Nombre + " tiene " + datos.Salud + " de salud.");
    }
}

Esta estructura de programación es muy común al desarrollar videojuegos en Unity y la verás constantemente en diferentes proyectos.

3.3 Conclusión.

El uso del Encapsulamiento y los Constructores (ya sean juntos o por separado) nos sirve para:

  • Seguridad: Evitar que otras clases modifiquen variables sin control
  • Claridad: Defines reglas de acceso y validación
  • Organización: Separar lógica de datos y visualización
  • Reutilización: Puedes crear múltiples objetos con diferentes datos fácilmente

El encapsulamiento y los constructores son herramientas clave para escribir código robusto en Unity. Aunque MonoBehaviour tiene restricciones, puedes combinar clases normales con scripts de Unity para lograr un diseño limpio y eficiente.

Los casos más comunes donde aplicamos a los constructores y el encapsulamiento son:

  • Para Clases de datos (Jugador, Item, Inventario)
  • Para Lógica de negocio (Sistema de Combate, Calculadora)
  • Para Controladores internos (Gestor de Puntos, Temporizador)
  • Para proteger y validar datos
  • Para inicializar clases de forma controlada

Ejercicios.

Para reforzar lo aprendido, es necesario practicarlo, por ello intenta realizar los siguientes ejercicios:

  1. Diseña tu propio constructor como el del ejemplo para crear dos tipos de Héroes.

Este Tutorial de Unity termina aquí. Acompáñanos en el siguiente tutorial donde veremos “Corrutinas”.

Siguiente Tutorial de Unity: “4. Corrutinas en Unity

¿Te resultó útil este Tutorial?
¡¡Recuerda, los Anuncios nos Ayudan a Mantener este “Gran Sitio” 😀 !!

Comparte el Post
Posted in CSharpUnity.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.