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#
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");
}
}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#
if (PlayerPrefs.HasKey("Volumen")) { /* existe */ }
PlayerPrefs.DeleteKey("Volumen"); // borra una clave
PlayerPrefs.DeleteAll(); // borra TODO (útil para "resetear opciones")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
.plistde preferencias. - Android/iOS: en las preferencias de la app.
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
booldirectamente (no existeSetBool): guarda unint0/1. - Confiar en PlayerPrefs para datos que no deban manipularse (es texto plano).
Guardar un bool#
Como no hay SetBool, se usa un int:
PlayerPrefs.SetInt("MusicaActivada", activada ? 1 : 0);
bool musica = PlayerPrefs.GetInt("MusicaActivada", 1) == 1;Ponte a prueba#
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.