7. Guarda datos de tu economía en una DataTable propia
Separar la configuración de la economía de su lógica.
En esta página
Objetivo: Separar la configuración de la economía de su lógica.
Antes de empezar: La cartera y su inicialización. Usarás tu propia estructura de fila.
La idea que vas a utilizar
Unreal almacena y lee la DataTable. El plugin representa el número y comprueba su contenido numérico; una regla de diseño requiere una comprobación propia.
Predice antes de ejecutar
¿Una fila ausente y un precio numéricamente inválido deben pasar por la misma salida de Get Data Table Row?
Construye y comprueba
Vas a crear una estructura de fila que encaja con tu juego, leer sus campos con nodos nativos de Unreal y validar los números antes de distribuir el asset.
A. Define la estructura y crea la tabla
- Detén Play. En el Content Browser abre Add → Blueprints → Structure y crea ST_EconomyRow.
- Añade Price y Reward, ambos de tipo Scientific Number; Category de tipo Gameplay Tag; y Label de tipo String. Configura etiquetas como
Game.EconomyyGame.Shopen los Gameplay Tags del proyecto, si aún no existen. - Dentro de Data, elige Miscellaneous → Data Table. Selecciona ST_EconomyRow como estructura de fila y llama a la tabla DT_MiEconomia.
- En el editor de la tabla, crea las filas
DefaultsyUpgrade. En el campo de texto único, escribe1e3para Defaults.Price,2.5e1para Defaults.Reward,2.5e2para Upgrade.Price y0para Upgrade.Reward. Elige Category con el selector de Gameplay Tag y completa Label. - Guarda la tabla y usa su opción nativa Export para exportarla como CSV y JSON. Conserva el CSV exportado como plantilla: Unreal escribe el encabezado de fila y la serialización exacta de Gameplay Tag. Si editas Price en el archivo, cambia solo esa celda y usa Import o Reimport en el editor de la tabla. Revisa los datos y guarda los cambios.
Qué debes ver: dos filas con tus cuatro campos. Defaults.Price representa 1000, Defaults.Reward representa 25 y Upgrade.Price representa 250. La estructura es tuya: puedes cambiar nombres, añadir más campos FScientificNumber o incluirlos en estructuras y contenedores anidados.
B. Lee una fila con nodos nativos de Unreal
- Crea un Actor Blueprint llamado BP_MiTabla y coloca una instancia en el nivel. En My Blueprint, crea una variable Tabla de tipo Data Table Object Reference y otra variable Fila de tipo Name. Compila; después, en Class Defaults asigna
DT_MiEconomiaa Tabla yDefaultsa Fila. - En Event Graph, conecta la ejecución de Event BeginPlay a la entrada de ejecución de Get Data Table Row. Conecta Tabla al pin Data Table y Fila al pin Row Name.
- Conecta Out Row a Break ST_EconomyRow. Conecta Price a Value de To Fixed String y el Return Value a In String de Print String. Usa Decimal Places = 2. Conecta la ejecución de Row Found a la entrada de ejecución de To Fixed String, y su salida de ejecución a Print String. No añadas Branch para Row Found.
- Conecta el pin de ejecución Row Not Found a otro Print String con
No se encontró la fila Defaults. - Compila, guarda y pulsa Play.
Resultado esperado: se imprime 1000.00. Cambia Fila a Upgrade y repite: aparece 250.00. Prueba FilaInexistente: se ejecuta la ruta Row Not Found y no se imprime un número como válido.
C. Inicializa tu cartera Normal desde la tabla
- En el Actor de tu cartera, conserva Wallet, el Scientific Number Value Component (Normal) de la lección 3.
- En el recorrido de nueva partida, conecta la ejecución de BeginPlay a Get Data Table Row, con DT_MiEconomia y Row Name
Defaults. - Conecta Out Row a Break ST_EconomyRow y Price a New Value de Try Set Value. Conecta Wallet a Target y el pin de ejecución Row Found de Get Data Table Row directamente a Try Set Value.
- Comprueba el bool de Try Set Value con Branch antes de continuar la inicialización. En False, pasa Out Error a Print Scientific Number Error. Conecta Row Not Found de Get Data Table Row a un mensaje de fila inexistente y detén esa ruta.
Resultado esperado: Wallet contiene 1000. Si Price tiene un error numérico tipado, Try Set Value devuelve False y conserva el saldo anterior. Para una partida guardada, usa la ruta de carga de la sección 6; no vuelvas a aplicar el saldo inicial.
D. Importa, exporta y valida con Unreal
- Usa el CSV que exportaste en el editor como plantilla de importación; conserva el encabezado y el formato de Gameplay Tag escrito por Unreal. El editor nativo también permite exportar e importar JSON. Revisa la tabla después de cada importación y guárdala desde su editor cuando termines. Si Unreal muestra errores de importación, corrige el archivo y vuelve a importar. Validate Assets comprueba el contenido que está almacenado ahora; no sustituye la revisión de errores de importación.
- En el Content Browser, haz clic derecho sobre DT_MiEconomia y elige Asset Actions → Validate Assets. Revisa el resultado en el informe de validación de Unreal.
El validador del editor de Scientific Number Tools busca campos reflejados FScientificNumber en cualquier estructura de fila y recorre estructuras anidadas, arrays, sets y claves y valores de mapas. Un error identifica asset, fila, ruta completa de propiedad y motivo numérico. Un valor con error tipado, como Overflow, es contenido numérico inválido; una representación malformada recibe un diagnóstico distinto. El validador no cambia los datos ni impone reglas de juego, como que un precio sea positivo. Solo inspecciona campos FScientificNumber; no valida Packed ni Safe.
Qué has construido: una configuración con tu propio esquema, lectura por las funciones nativas de Unreal y una comprobación de contenido numérico antes de usar la tabla.
Comprueba tu razonamiento
Ver la explicación
No. Row Not Found indica ausencia. Una fila encontrada puede contener un número rechazado al asignarlo; comprueba también Try Set Value.
Ahora prueba tú: Prueba una fila inexistente en una copia del grafo y explica por qué no debes continuar como si se hubiera leído Defaults.
Puedes continuar cuando: puedes seguir el dato desde la fila hasta la inicialización y tratar ambos fallos.
Tu progreso se guarda solo en este navegador y se conserva al cambiar de idioma.