🎮 UnityDocs

PlayerPrefs: guardar ajustes y récords

El sistema más simple para guardar datos pequeños entre sesiones (volumen, récord, opciones). Cómo se usa, dónde se guarda y por qué NO sirve para guardar partidas.

📄 ArtículoPrincipiante✅ RevisadoUnity 6.0 LTSActualizado 2026-07-15
DificultadConceptual Código Matemáticas
Tiempo📖 Lectura 5 min · ⌨️ Práctica 10 min

Qué es#

PlayerPrefs es un almacén clave-valor muy simple para guardar datos pequeños que deben sobrevivir a cerrar el juego: el volumen, el mejor récord, si la música está activada, el nombre del jugador. Guarda tres tipos: int, float y string.

Guardar y cargar#

C#
using UnityEngine;

public class Ajustes : MonoBehaviour
{
    void Guardar()
    {
        PlayerPrefs.SetInt("MejorPuntuacion", 1500);
        PlayerPrefs.SetFloat("Volumen", 0.8f);
        PlayerPrefs.SetString("NombreJugador", "Ana");
        PlayerPrefs.Save();   // fuerza el guardado a disco
    }

    void Cargar()
    {
        // El segundo parámetro es el valor por defecto si la clave no existe
        int record = PlayerPrefs.GetInt("MejorPuntuacion", 0);
        float vol   = PlayerPrefs.GetFloat("Volumen", 1f);
        string nombre = PlayerPrefs.GetString("NombreJugador", "Jugador");
    }
}
Da siempre un valor por defecto

PlayerPrefs.GetInt("MejorPuntuacion", 0) devuelve 0 si nunca se guardó. Sin ese segundo parámetro, obtienes 0/0f/"" igualmente, pero especificarlo hace el código claro y evita sorpresas la primera vez que se ejecuta el juego.

Comprobar, borrar y guardar#

C#
if (PlayerPrefs.HasKey("Volumen")) { /* existe */ }

PlayerPrefs.DeleteKey("Volumen");   // borra una clave
PlayerPrefs.DeleteAll();            // borra TODO (útil para "resetear opciones")
Save() y el cierre

Unity guarda PlayerPrefs automáticamente al salir del juego de forma limpia (OnApplicationQuit). Pero si el juego se cierra de golpe (crash, cerrar el proceso), se puede perder. Llama a PlayerPrefs.Save() tras un cambio importante (como confirmar opciones) para asegurarlo.

Dónde se guarda#

  • Windows: en el Registro (HKCU\Software\...).
  • macOS: en un archivo .plist de preferencias.
  • Android/iOS: en las preferencias de la app.
PlayerPrefs NO es para guardar partidas

Es la trampa más común. PlayerPrefs es para datos pequeños y no sensibles (ajustes, un récord). No lo uses para el estado de la partida (inventario, progreso, posición) porque:

  • Guarda en texto plano y es trivial de manipular (un jugador cambia su récord en 10 segundos).
  • No está pensado para estructuras complejas.
  • Ensucia el Registro/preferencias del sistema.

Para guardar partidas, usa JSON en un archivo.

Errores frecuentes#

  • Usar PlayerPrefs para guardar la partida completa (usa JSON).
  • Olvidar Save() tras un cambio crítico y perderlo en un cierre inesperado.
  • Guardar un bool directamente (no existe SetBool): guarda un int 0/1.
  • Confiar en PlayerPrefs para datos que no deban manipularse (es texto plano).

Guardar un bool#

Como no hay SetBool, se usa un int:

C#
PlayerPrefs.SetInt("MusicaActivada", activada ? 1 : 0);
bool musica = PlayerPrefs.GetInt("MusicaActivada", 1) == 1;

Ponte a prueba#

📝 Pon a prueba lo aprendido

Resumen#

PlayerPrefs guarda int/float/string pequeños entre sesiones (opciones, récords) con SetX/GetX y un valor por defecto. Llama a Save() tras cambios importantes y guarda los bool como int 0/1. No lo uses para partidas ni datos sensibles: es texto plano y manipulable. Para eso, guardado con JSON.

Fuentes y para profundizar