6. Guarda el saldo de tu cartera y recupéralo
guardar un único saldo real y recuperarlo en otra sesión.
En esta página
Objetivo: guardar un único saldo real y recuperarlo en otra sesión. Antes de empezar: la cartera Normal y su widget de la lección 3. Safe y Packed no son requisitos.
La idea que vas a utilizar
El componente Wallet vive en la partida actual. Un objeto SaveGame lleva una copia del saldo al archivo. El texto 1.25K es presentación; guardaremos un Scientific Number, no ese texto.
Predice: si comienzas con 1000, produces 25 y compras por 100, ¿qué número debe quedar guardado? ¿Puede recuperarse si BeginPlay guarda otra vez 1000 antes de cargar?
Crea el objeto de partida
- En Blueprints crea Blueprint Class → All Classes → SaveGame, llamado
BP_MiPartidaCartera. - Añade una variable
Balancede tipo Scientific Number, activa Save Game en sus detalles avanzados y déjala accesible desde otros Blueprints. Compila y guarda. - En
BP_MiCarteracrea dos funciones,GuardarSaldoyCargarSaldo, cada una con un output BooleanSuccess. En todos los caminos de fallo devuelve false. Son las funciones de tu Actor, no nodos nuevos del plugin.
Guardar el valor actual
- En
GuardarSaldo, leeWallet → Get Valuey comprueba suIs Successcon Branch. En false termina con Success false. - En true ejecuta Create Save Game Object, Class
BP_MiPartidaCartera. Conserva su Return Value en una variable localPartidade ese tipo. - Arrastra desde Get Partida y crea Set Balance. Su Target es Partida; el valor es la lectura válida de Wallet. Conecta la ejecución después de crear y conservar el objeto.
- Después llama a Save Game to Slot. Save Game Object = Partida, Slot Name =
MiCarteraPractica, User Index =0. Conecta su bool de resultado a Success del Return Node.
Hasta llamar a Save Game to Slot solo habías creado y rellenado un objeto en memoria. Su bool confirma si Unreal consiguió escribirlo.
Recuperar el valor guardado
- En
CargarSaldo, comprueba Does Save Game Exist con el mismo slot e índice. Si no existe, devuelve false sin cambiar Wallet. - Si existe, ejecuta Load Game from Slot y lleva Return Value a Cast To BP_MiPartidaCartera. En Cast Failed devuelve false.
- Desde la referencia del cast, lee
Balancey pásalo a Try Set Value de Wallet. Conecta la ejecución de cast correcto a esa asignación. - Devuelve el bool de Try Set Value como Success; si falla, utiliza Out Error para diagnóstico. No inicialices otra vez 1000 después de cargar.
Añade los botones y comprueba otra sesión
- En
WBP_MiCarteraañadeBTN_GuardaryBTN_Cargar, con textos Guardar y Cargar. - Desde OnClicked de Guardar llama a
Cartera → GuardarSaldo. Comprueba Success y escribe enTXT_Estado«Partida guardada» o «No se pudo guardar». - Desde OnClicked de Cargar llama a
Cartera → CargarSaldo. Solo en éxito ejecutaActualizarSaldoy muestra «Partida cargada»; en fallo muestra «No se pudo cargar» conservando el saldo actual. - No llames a GuardarSaldo desde BeginPlay. Mantén la inicialización habitual de una partida nueva y guarda solo al pulsar el botón.
- Ejecuta: produce una vez, compra una vez y guarda. Debe guardarse 925. Detén Play, cierra el editor y vuelve a abrir el nivel. Antes de cargar ves el saldo inicial 1000; al pulsar Cargar debes ver 925.00, o su representación equivalente si usas tu formatter.
Comprueba tu razonamiento
Ver la explicación
1000 + 25 − 100 = 925. Si guardases el saldo inicial en ese mismo slot antes de cargarlo, sobrescribirías lo que intentabas recuperar. El botón de carga utiliza el objeto leído del archivo, no el valor inicial del Actor.
Ahora prueba tú: carga con un nombre de slot distinto que no hayas creado. Debe fallar sin alterar Wallet. Restaura el nombre original al terminar.
Puedes continuar cuando: has recuperado el saldo de otra sesión y sabes distinguir fallo de carga, saldo inicial y saldo guardado.
Si tu proyecto utiliza otros tipos
Este primer recorrido usa un Scientific Number Normal. La ampliación de guardado de otros tipos explica Packed y Prepare/Restore para Safe y Context-Bound. SaveGame almacena el archivo; este ejemplo no lo cifra ni autentica. La protección Safe en memoria no acredita la autenticidad de un archivo cargado.
Tu progreso se guarda solo en este navegador y se conserva al cambiar de idioma.