Sistema de progreso y desbloqueo en Unity (niveles, logros y persistencia)

Sistema de progreso y desbloqueo en Unity (niveles, logros y persistencia)

Uno de los factores más importantes para mantener a un jugador comprometido es la sensación de progreso. Subir de nivel, desbloquear contenido o completar logros convierte una experiencia corta en un juego memorable.

En este artículo aprenderás cómo implementar un sistema de progreso y desbloqueo en Unity, ideal para videojuegos indie, usando una estructura clara, persistente y alineada con los sistemas que ya hemos desarrollado en la serie.


Qué es un sistema de progreso en un videojuego

Un sistema de progreso define cómo el jugador avanza a lo largo del juego. Puede incluir:

  • Niveles o experiencia
  • Desbloqueo de personajes o habilidades
  • Logros o hitos
  • Contenido nuevo al avanzar

El progreso da propósito a las acciones del jugador.


Errores comunes en proyectos indie

Algunos errores frecuentes al manejar progreso:

  • Datos que se pierden al cerrar el juego
  • Progreso repartido en múltiples scripts
  • Desbloqueos difíciles de mantener

La clave es centralizar y persistir correctamente la información.


Estructura recomendada para el sistema de progreso

Una estructura simple y escalable:


Progression
 ├─ ProgressManager
 ├─ LevelSystem
 ├─ AchievementSystem
 └─ UnlockSystem

Cada sistema tiene una responsabilidad clara.


ProgressManager: punto central del progreso

El ProgressManager controla el estado global del jugador:


using UnityEngine;

public class ProgressManager : MonoBehaviour
{
    public static ProgressManager Instance;

    public int playerLevel;
    public int experience;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
            LoadProgress();
        }
        else
        {
            Destroy(gameObject);
        }
    }

    public void AddExperience(int amount)
    {
        experience += amount;
        CheckLevelUp();
        SaveProgress();
    }

    void CheckLevelUp()
    {
        if (experience >= 100)
        {
            experience -= 100;
            playerLevel++;
        }
    }

    void SaveProgress()
    {
        PlayerPrefs.SetInt("Level", playerLevel);
        PlayerPrefs.SetInt("XP", experience);
        PlayerPrefs.Save();
    }

    void LoadProgress()
    {
        playerLevel = PlayerPrefs.GetInt("Level", 1);
        experience = PlayerPrefs.GetInt("XP", 0);
    }
}

Este enfoque mantiene el progreso consistente y persistente.


Sistema de niveles

El sistema de niveles puede ser tan simple o complejo como lo requiera tu juego:

  • Niveles por experiencia
  • Niveles por misiones
  • Niveles por tiempo o puntuación

Lo importante es que sea claro para el jugador.


Sistema de logros

Los logros refuerzan el comportamiento del jugador:


public class AchievementSystem
{
    public static void UnlockAchievement(string id)
    {
        PlayerPrefs.SetInt("ACH_" + id, 1);
    }

    public static bool IsUnlocked(string id)
    {
        return PlayerPrefs.GetInt("ACH_" + id, 0) == 1;
    }
}

Esto permite mostrar logros en la UI o desbloquear recompensas.


Sistema de desbloqueo de contenido

Los desbloqueos suelen depender del progreso:

  • Nuevas habilidades
  • Niveles adicionales
  • Personajes o modos de juego

public class UnlockSystem
{
    public static bool IsUnlocked(string key)
    {
        return PlayerPrefs.GetInt("UNLOCK_" + key, 0) == 1;
    }

    public static void Unlock(string key)
    {
        PlayerPrefs.SetInt("UNLOCK_" + key, 1);
    }
}

Este sistema es simple y fácil de expandir.


Integración con UI

La UI puede mostrar:

  • Nivel actual
  • Barra de experiencia
  • Logros desbloqueados

La interfaz solo consulta el estado, no decide lógica.


Buenas prácticas para progreso y persistencia

  • Centraliza el progreso del jugador
  • Guarda datos críticos frecuentemente
  • Evita lógica duplicada
  • Diseña el progreso antes de programar

Un sistema de progreso bien diseñado mejora la retención.


El progreso mantiene vivo tu juego

Un sistema de progreso y desbloqueo bien implementado transforma un juego indie en una experiencia que invita a seguir jugando. No se trata solo de números, sino de motivación.

Unity facilita la parte técnica; el diseño del progreso es tu verdadera herramienta creativa.