Saltar al contenido principal

PlayerPrefs y SaveData

Polygon Engine almacena los datos del proyecto en un bloque de tarjeta de memoria de 8,192 bytes en el puerto 1. Play Mode del editor usa una copia local en JSON con los mismos límites fijos de entradas y cadenas. Usa PlayerPrefs para la configuración y el progreso del juego, y SaveData cuando necesites almacenar cadenas sin procesar.

Límites​

TemaLímite
Total de entradas32
Clave física31 bytes más terminador
Valor63 bytes más terminador
Asignación de tarjetas de memoriaUn bloque
Tarjeta activaPuerto 1

Para PlayerPrefs, usa claves de hasta 28 bytes y cadenas de hasta 61 bytes. Estos límites cuentan bytes UTF-8, por lo que los caracteres acentuados pueden ocupar más de un byte. Los valores tipados y los datos sin procesar comparten el mismo almacenamiento de 32 entradas.

PlayerPrefs​

SetInt, SetFloat y SetString devuelven false cuando no se puede codificar un valor. Sus getters aceptan un valor predeterminado opcional. HasKey, DeleteKey y DeleteAll administran solo las entradas PlayerPrefs; DeleteAll no borra las claves de SaveData sin procesar. Save guarda de forma persistente el conjunto completo de datos.

function CompleteChapter(gameObjectId)
if not PlayerPrefs.SetInt("chapter", 2) or not PlayerPrefs.Save() then
Log.Print("Save failed: " .. SaveData.GetLastError())
end
end

function Start(gameObjectId)
local chapter = PlayerPrefs.GetInt("chapter", 0)
local volume = PlayerPrefs.GetFloat("volume", 1.0)
local language = PlayerPrefs.GetString("language", "en")
end

SaveData​

MétodoFinalidad
SaveData.Write(key, value)Cambia un valor de cadena sin procesar en la memoria.
SaveData.Read(key)Devuelve una cadena sin procesar o nil.
SaveData.Delete(key)Elimina una clave de la memoria; devuelve true aunque no exista. Llama a Flush para guardar la eliminación.
SaveData.Flush()Guarda de forma persistente todos los datos que están en memoria.
SaveData.Clear()Borra de la memoria todas las entradas, tanto con tipos definidos como sin procesar.
SaveData.Reload()Lee el almacenamiento de la plataforma; comprueba si tuvo éxito antes de usar el resultado.
SaveData.GetLastError()Devuelve el último diagnóstico de persistencia.

Comprueba siempre los resultados de las escrituras, PlayerPrefs.Save, SaveData.Flush y SaveData.Reload. Informa al jugador si la operación tuvo éxito o falló. No des por hecho que hay una tarjeta insertada, que está formateada, que permite escritura o que tiene un bloque libre.

Usa View > Save Data Simulator para inspeccionar el espacio ocupado por los datos y simular una tarjeta ausente, llena o dañada antes de compilar. Configura un Save File ID único y un Display Title legible para tu juego en Project Settings.

Guardado y carga del progreso​

Los setters modifican los valores actuales. Llama a PlayerPrefs.Save() o SaveData.Flush() para guardarlos y comprueba el resultado antes de mostrar un mensaje de éxito. Si falla el guardado, ofrece un reintento y conserva el progreso del jugador.

Usa SaveData.Reload() cuando el jugador elige cargar su último guardado. Comprueba el resultado antes de mover al jugador o aplicar los ajustes guardados. Una carga exitosa reemplaza los cambios sin guardar. El tutorial Two-Room Relay muestra un flujo completo de guardado, carga, restablecimiento y reintento.

Probar una Memory Card​

En DuckStation, habilita una Memory Card en Slot 1 y selecciona un archivo de tarjeta con permiso de escritura. Un guardado nuevo necesita un bloque libre. Usa la misma tarjeta al volver a abrir el juego: la configuración de tarjetas por juego puede seleccionar otro archivo si cambias el título del disco. No formatees una tarjeta que contenga partidas que quieras conservar.

En PS1, guardar y cargar son operaciones síncronas que pueden tardar unos segundos. El runtime pausa la música CD-XA durante el acceso a la tarjeta y reinicia la pista al terminar. Espera el mensaje de éxito o error antes de retirar la tarjeta o reiniciar la consola. No necesitas detener la música desde tu script de guardado.

Si el guardado falla, consulta SaveData.GetLastError() de inmediato, antes de que otra llamada a SaveData cambie el diagnóstico. Revisa Slot 1, el espacio libre y el permiso de escritura, y permite volver a intentar. Que el guardado funcione en Play Mode no valida la configuración de la Memory Card del emulador.