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.


