NO MOM
I CANT PAUSE.
Scientific Number Tools Documentación
Soporte
Explorar lecciones

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

  1. En Blueprints crea Blueprint Class → All Classes → SaveGame, llamado BP_MiPartidaCartera.
  2. Añade una variable Balance de tipo Scientific Number, activa Save Game en sus detalles avanzados y déjala accesible desde otros Blueprints. Compila y guarda.
  3. En BP_MiCartera crea dos funciones, GuardarSaldo y CargarSaldo, cada una con un output Boolean Success. En todos los caminos de fallo devuelve false. Son las funciones de tu Actor, no nodos nuevos del plugin.

Guardar el valor actual

  1. En GuardarSaldo, lee Wallet → Get Value y comprueba su Is Success con Branch. En false termina con Success false.
  2. En true ejecuta Create Save Game Object, Class BP_MiPartidaCartera. Conserva su Return Value en una variable local Partida de ese tipo.
  3. 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.
  4. 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

  1. En CargarSaldo, comprueba Does Save Game Exist con el mismo slot e índice. Si no existe, devuelve false sin cambiar Wallet.
  2. Si existe, ejecuta Load Game from Slot y lleva Return Value a Cast To BP_MiPartidaCartera. En Cast Failed devuelve false.
  3. Desde la referencia del cast, lee Balance y pásalo a Try Set Value de Wallet. Conecta la ejecución de cast correcto a esa asignación.
  4. 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

  1. En WBP_MiCartera añade BTN_Guardar y BTN_Cargar, con textos Guardar y Cargar.
  2. Desde OnClicked de Guardar llama a Cartera → GuardarSaldo. Comprueba Success y escribe en TXT_Estado «Partida guardada» o «No se pudo guardar».
  3. Desde OnClicked de Cargar llama a Cartera → CargarSaldo. Solo en éxito ejecuta ActualizarSaldo y muestra «Partida cargada»; en fallo muestra «No se pudo cargar» conservando el saldo actual.
  4. No llames a GuardarSaldo desde BeginPlay. Mantén la inicialización habitual de una partida nueva y guarda solo al pulsar el botón.
  5. 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.

Volver al recorrido y sus ampliaciones