What is data persistence in Unity?

GameDB para Unity: La Guía Definitiva

23/02/2014

Valoración: 3.92 (9479 votos)

Todo desarrollador de Unity, tarde o temprano, se enfrenta al desafío de gestionar datos. Ya sea para balancear las estadísticas de un personaje, crear tablas de loot, configurar niveles o simplemente almacenar información que no debería estar escrita directamente en el código, la gestión de datos es crucial. Los valores hard-codeados (escritos a fuego en los scripts) son un camino rápido hacia el desorden, la dificultad para iterar y los dolores de cabeza en equipo. Aquí es donde entra en juego GameDB, un potente plugin para Unity diseñado para ser la solución centralizada y visual a este problema.

What is gamedb in Unity?
GameDB is a Unity Plugin that provides an easy to use and powerful game and meta data editor. With this asset your scripts no longer have to use hard-coded references and instead can refer to your database for lists of values, files, prefabs, and other data types.

GameDB es, en esencia, un editor de bases de datos integrado en Unity que te permite crear, editar y gestionar todos los datos de tu juego de una manera intuitiva y poderosa. En lugar de tener referencias directas a prefabs o valores mágicos en tus scripts, puedes centralizar todo en una base de datos que genera archivos JSON y las clases de C# necesarias para acceder a ellos de forma segura y tipada. Este artículo es una guía completa para que domines esta herramienta y lleves tu flujo de trabajo al siguiente nivel.

Índice de Contenido

¿Qué es GameDB y por qué es tan útil?

Imagina que estás balanceando la economía de tu juego. Tienes 100 items, cada uno con un precio de compra, un precio de venta, un peso y estadísticas. Si todos estos valores están en tus scripts, cualquier pequeño ajuste implica buscar en el código, cambiar el valor, recompilar y probar. Con GameDB, simplemente abres una tabla visual, similar a una hoja de cálculo, cambias los valores y ¡listo! Incluso puedes hacerlo mientras el juego está en ejecución.

GameDB brilla en escenarios como:

  • Tablas de Loot: Define qué enemigos sueltan qué objetos y con qué probabilidad.
  • Balance de NPCs y Personajes: Centraliza la vida, el daño, la velocidad y otras estadísticas de todas las unidades de tu juego.
  • Búsqueda de Prefabs: Ideal para sistemas procedurales donde necesitas instanciar assets específicos según ciertas reglas.
  • Configuración del Juego: Gestiona variables globales como la dificultad, configuraciones de audio o cualquier otro parámetro del juego.
  • Diálogos y Localización: Almacena líneas de diálogo y sus traducciones en tablas fáciles de gestionar.

El objetivo final es desacoplar los datos de la lógica del juego, permitiendo que diseñadores, artistas y programadores trabajen de manera más eficiente y colaborativa.

Primeros Pasos: Creando tu Primera Base de Datos

Empezar con GameDB es un proceso sencillo. Una vez instalado el plugin desde la Asset Store, encontrarás su menú en la barra superior de Unity.

1. Abrir el Editor: Navega a Window > GameDB > Open Editor. Esto abrirá la ventana principal de GameDB.

Should unity have a GUI or a data editor?
Build-in game data editor, code generator and integration tools for Unity In general the more ‘flexible’ the tool, the more custom tooling/GUI you need to build on top of it to create an editor (i.e. helper for templating items into a db). A format with lots of GUI built already would be less flexible (i.e. articy draft).

2. Crear la Base de Datos: Haz clic en "Create GameDB". Se te pedirá que elijas una ubicación para guardar tus archivos. Es muy recomendable guardarlos dentro de una carpeta llamada "Resources", ya que esto facilitará enormemente la carga de los datos en el juego. Al confirmar, GameDB creará dos archivos: tu_nombre.json (que contendrá los datos) y tu_nombre.schema.json (que define la estructura de las tablas).

3. Definir el "Scope Name": Lo primero que debes hacer es asignar un "Scope Name". Este nombre es crucial, ya que se usará para crear el namespace de las clases C# generadas. Por ejemplo, si lo llamas "MiJuego", el namespace será GameDBMiJuego. Esto evita conflictos de nombres si usas varias bases de datos.

4. Crear una Tabla: Ahora, ¡a crear! Introduce un nombre para tu tabla (ej: "Items"), selecciona un tipo de clave (Key Type), que generalmente será `String` o `Int32`, y haz clic en "Create Table". La tabla aparecerá colapsada. Haz clic en su nombre para expandirla.

5. Definir los Campos (Columnas): Una tabla vacía no es muy útil. Haz clic en "Edit Table". En la sección "Modify Schema", puedes empezar a añadir campos. Para cada campo, necesitas:

  • Field Name: El nombre de la columna (ej: "Nombre", "Precio", "Daño").
  • Data Type: El tipo de dato que almacenará (veremos los tipos más adelante).
  • Array: Marca esta casilla si quieres que el campo sea una lista de valores en lugar de uno solo.

Haz clic en "Create Field" por cada columna que necesites.

6. Añadir Datos (Filas): Para añadir una entrada, introduce un valor único en el campo "Key" en la parte superior de la tabla y haz clic en "Create Key". Esto creará una nueva fila donde podrás rellenar los datos para cada uno de los campos que definiste.

7. Guardar y Generar Clases: Cuando estés satisfecho, haz clic en "Save GameDB" para guardar tus cambios en los archivos JSON. El paso final y más importante es hacer clic en "Generate Classes". Selecciona una carpeta para guardar los scripts y GameDB creará automáticamente todo el código C# que necesitas para interactuar con tu nueva base de datos.

How do I save data in Unity?
Saving data is critical for any game. Whether you need to save high scores, preferences, or a game state, Unity offers a variety of methods – from PlayerPrefs to serializing data, encrypting it, and writing to a file. Updated June 23rd, 2021: PlayerPrefs.SetInt("Volume", 50); PlayerPrefs.Save(); public void LoadPrefs() {

Integrando y Usando GameDB en tu Juego

Aquí es donde la magia ocurre. Gracias a las clases generadas, leer los datos en tu juego es increíblemente fácil y seguro.

El código generado incluye varias clases por cada tabla. Si tu tabla se llama "Items", tendrás algo como ItemsTable.cs, ItemsSchema.cs y Item.cs (el nombre de la fila es en singular). Todas ellas estarán dentro del namespace que definiste (ej: GameDBMiJuego).

Para cargar y leer los datos, el proceso es el siguiente:

// Asegúrate de incluir el namespace de tu DB y UnityEngine using GameDBMiJuego; using UnityEngine; public class GestorItems: MonoBehaviour { void Start() { // 1. Crea una nueva instancia de la clase principal de tu base de datos. GameDB gameDb = new GameDB("MiBasedeDatos"); // 2. Suscríbete al evento OnDBLoaded. Este código se ejecutará cuando los datos se carguen con éxito. gameDb.OnDBLoaded = delegate() { Debug.Log("¡Base de datos cargada con éxito!"); // 3. Accede a los datos. // Ejemplo 1: Obtener un item específico por su clave. // Usamos la clase Schema para no tener que escribir el string de la clave a mano. var espada = gameDb.ItemsTable.GetByKey(ItemsSchema.KeyEspadaDeHierro); if (espada != null) { Debug.Log($"Nombre: {espada.NombreVal}, Daño: {espada.DanoVal}"); } // Ejemplo 2: Recorrer todos los items de la tabla. foreach (var parItem in gameDb.ItemsTable.GetRows()) { Item itemActual = parItem.Value; Debug.Log($"Item encontrado: {itemActual.NombreVal} con un coste de {itemActual.CosteVal}"); } }; // 4. Inicia la carga de la base de datos. La ruta es relativa a la carpeta "Resources". gameDb.Load("GameDBs/mi_basededatos"); // Si guardaste el .json en Assets/Resources/GameDBs/mi_basededatos.json } }

El Poder del "Hot Reloading": Edición en Tiempo Real

Una de las características más potentes de GameDB es el hot-reloading. Esto te permite tener la ventana del editor de GameDB abierta mientras tu juego está en modo Play. Puedes modificar cualquier valor en la base de datos, pulsar el botón "Reload In-Game" y ver los cambios reflejados instantáneamente sin necesidad de reiniciar el juego.

Este flujo de trabajo es revolucionario para el balanceo. ¿Un enemigo es demasiado difícil? Bájale la vida en la tabla de NPCs y la actualización se aplicará al instante. ¿El precio de una poción es muy bajo? Súbelo y pruébalo en el acto. Esto acelera el ciclo de iteración de manera exponencial.

Técnicamente, al hacer "Reload In-Game", se vuelve a disparar el evento `OnDBLoaded` en tu juego. Por ello, es una buena práctica que el código dentro de este delegado sea capaz de refrescar los sistemas que dependen de estos datos.

Tipos de Datos Soportados

GameDB soporta una amplia variedad de tipos de datos, incluyendo tipos básicos y específicos de Unity. Además, todos ellos pueden ser utilizados como arrays.

What is gamedb in Unity?
GameDB is a Unity Plugin that provides an easy to use and powerful game and meta data editor. With this asset your scripts no longer have to use hard-coded references and instead can refer to your database for lists of values, files, prefabs, and other data types.

Tabla Comparativa de Tipos de Datos

Tipo de DatoDescripciónUso ComúnVersión Pro
StringCadena de texto.Nombres, descripciones, IDs.No
Int32Número entero de 32 bits.Vida, daño, puntuación, cantidad.No
FloatNúmero de punto flotante.Velocidad, probabilidad, tiempo.No
BoolValor booleano (verdadero/falso).¿Es visible?, ¿Está activo?, ¿Puede volar?No
UnityEngine.ColorColor con componentes RGBA.Color de materiales, partículas, UI.No
UnityEngine.Vector2/3/4Vectores de 2, 3 o 4 componentes.Posiciones, direcciones, escalas.No
UnityEngine.ObjectReferencia a cualquier asset de Unity (Prefabs, Texturas, AudioClips, etc.).Asignar prefabs de enemigos, iconos de UI.No
EnumEnumeración importada de tu código.Tipos de item, estados de personaje, rareza.
Table ReferenceReferencia a una clave de otra tabla en la misma DB.Relacionar un item con su receta de crafteo.

Preguntas Frecuentes (FAQ)

¿Necesito colocar mis assets en la carpeta "Resources"?

Sí. Para los tipos de datos que son assets de Unity, como `UnityEngine.Object` (que incluye Prefabs, Texturas, etc.), GameDB utiliza el sistema `Resources.Load` para cargarlos en tiempo de ejecución. Por lo tanto, cualquier asset que quieras referenciar desde tu base de datos debe estar ubicado dentro de una carpeta llamada Resources en tu proyecto.

¿Qué pasa si edito las clases C# generadas manualmente?

No es recomendable. Esos archivos están diseñados para ser autogenerados. Si haces cambios manuales en ellos, se perderán la próxima vez que hagas clic en "Generate Classes" desde el editor de GameDB. Si necesitas añadir lógica adicional, es mejor hacerlo en una clase separada que utilice los datos de GameDB.

¿GameDB sirve para guardar el progreso del jugador?

No directamente. GameDB está diseñado para gestionar datos de diseño del juego (lo que a veces se llama "cold data"), es decir, datos que definen el juego y que no suelen cambiar durante la partida (o solo los cambia el desarrollador). Para guardar el progreso del jugador (partidas guardadas, inventario, etc., o "hot data"), deberías usar un sistema de serialización y guardado tradicional, como `PlayerPrefs`, archivos binarios o JSON, aunque podrías usar la estructura de GameDB como modelo para tus datos de guardado.

¿Es GameDB gratuito?

GameDB tiene una versión base disponible en la Unity Asset Store y una versión Pro con características avanzadas, como los tipos de datos `Enum` y `Table Reference`, que permiten flujos de trabajo más complejos y robustos. Para la mayoría de los proyectos, la versión base es un punto de partida extremadamente potente.

Conclusión

GameDB es más que un simple editor de datos; es un cambio de paradigma en la forma de organizar y gestionar un proyecto en Unity. Al adoptar un enfoque basado en bases de datos, te liberas de las cadenas de los valores hard-codeados, permitiendo una iteración más rápida, un código más limpio y una colaboración mucho más fluida entre los diferentes roles de un equipo de desarrollo. Su facilidad de uso, junto con potentes características como el hot-reloading, lo convierten en una herramienta casi indispensable en la caja de herramientas de cualquier desarrollador de Unity serio. Si aún no lo has probado, dale una oportunidad y observa cómo transforma tu proceso de desarrollo.

Si quieres conocer otros artículos parecidos a GameDB para Unity: La Guía Definitiva puedes visitar la categoría Juegos.

Subir