Guardar y Cargar Estadísticas en Unity: Guía de Persistencia para Atributos y Talentos

25 de abril de 2026

Implementar un sistema de ‘Save/Load’ para un RPG es un rito de pasaje técnico para cualquier desarrollador indie. Sin embargo, lo que empieza como una simple variable de salud pronto se convierte en un laberinto de modificadores, bonus de equipamiento, árboles de talentos y estadísticas derivadas que deben restaurarse perfectamente. Un solo error de sincronización y el jugador perderá horas de progreso o, peor aún, encontrará ‘exploits’ que rompan el balance de tu juego.

El Desafío: ¿Qué debemos guardar realmente?

El error más común es intentar serializar el estado final de un personaje. Si guardas que el jugador tiene 150 de ‘Fuerza’, pero no guardas de dónde viene ese valor (¿es base?, ¿es por un talento?, ¿es un buff temporal?), al cargar la partida y volver a aplicar los talentos, podrías terminar con 200 de Fuerza. Este fenómeno se conoce como ‘Double Dipping’ y es el terror de los sistemas de persistencia.

El secreto de un sistema profesional no es guardar el resultado, sino guardar las ‘semillas’ que permiten reconstruir el estado.

La Solución: Arquitectura Modular de MAS

Nuestro asset ‘Modular Attributes & Stats’ (MAS) fue diseñado específicamente para resolver este problema mediante una jerarquía de datos clara. Para persistir un personaje creado con MAS, solo necesitas enfocarte en tres pilares:

  • Atributos Base: Solo guardamos el ‘BaseValue’ (el máximo natural) y el ‘CurrentValue’ (el recurso actual).
  • Rangos de Talentos: Guardamos el nivel invertido en cada talento.
  • Progreso: Nivel actual y experiencia acumulada.

¿Por qué es esto eficiente? Porque los Atributos Derivados (como el Poder de Ataque que depende de la Fuerza) y los Modificadores se recalculan automáticamente en cuanto el sistema detecta que los valores base han sido cargados.

Implementación Técnica: El flujo de Guardado

Para guardar los datos, recomendamos crear una clase de datos simple (DTO) que sea fácilmente serializable a JSON. Aquí tienes un ejemplo de cómo estructurar la lógica:

[System.Serializable]
public class SaveData {
  public List<AttributeSave> attributes;
  public List<TalentSave> talents;
}

public void Save(AttributeManager manager, TalentAttributeManager talents) {
  // Solo guardamos lo esencial
  var data = new SaveData();
  foreach(var attr in manager.BaseAttributes) {
    data.attributes.Add(new AttributeSave(attr.Name, attr.BaseValue, attr.CurrentValue));
  }
  // ... serializar a JSON ...
}

Restaurando el Estado sin Bugs

Al cargar, el orden de los factores sí altera el producto. El flujo correcto con MAS es:

  1. Cargar los valores de los Atributos Base.
  2. Establecer los rangos de los Talentos usando ‘SetRankDirectly’.
  3. Permitir que el ‘AttributeManager’ dispare su evento ‘OnAttributeChanged’ global.

Al seguir este orden, MAS detecta los nuevos rangos de talento, genera los modificadores correspondientes y actualiza todos los Atributos Derivados en un solo frame. El resultado es una restauración limpia, optimizada y libre de duplicidad de valores.

Optimización del Rendimiento

Gracias al modelo reactivo de MAS, no necesitas ejecutar código de guardado pesado en cada frame. Puedes disparar el guardado solo en ‘Checkpoints’ o cuando ocurra un evento crítico. Además, al no tener que guardar los Atributos Derivados, el tamaño de tus archivos de guardado se reduce significativamente, algo vital si planeas usar guardado en la nube o plataformas móviles.


Persistir estadísticas no tiene por qué ser la parte más difícil de tu RPG. Con una arquitectura modular y reactiva, puedes centrarte en diseñar talentos épicos mientras MAS se encarga de que cada punto de salud esté donde debe estar.

Mejora tu juego hoy

Consigue este asset en la Unity Asset Store.