Crea una base de datos RPG con Scriptable Objects

Resumen

Crear una base de datos de ítems en Unity es mucho más fácil cuando usas Scriptable Objects. Si estás desarrollando un RPG o un juego medieval y necesitas gestionar armas, pociones y otros objetos sin depender de MonoBehaviour, esta es la herramienta que te ahorra tiempo y mantiene tu proyecto ordenado.

Los Scriptable Objects funcionan como contenedores de datos integrados con Unity, parecidos a un JSON, pero con la ventaja de poder llamar métodos y serializar información directamente desde el editor. Aquí vas a ver cómo construir tu primer Scriptable Object, definir la estructura de un ítem y exponerlo en el inspector.

¿Qué es un Scriptable Object en Unity y para qué sirve?

Un Scriptable Object es una clase especial de Unity que almacena datos reutilizables sin necesidad de estar adjunta a un GameObject. Es ideal para construir bases de datos de ítems, configuraciones de personajes o cualquier información que quieras tener centralizada [00:18].

¿Cuál es la diferencia entre MonoBehaviour y ScriptableObject? MonoBehaviour vive en un GameObject dentro de la escena. ScriptableObject vive como asset en tu proyecto, no necesita escena ni instancia activa, y guarda datos persistentes que puedes reutilizar en múltiples lugares.

Para crear tu clase base, primero importas el paquete de íconos que vas a usar para representar cada ítem. Luego creas el script llamado ItemScriptableObject y reemplazas la herencia de MonoBehaviour por ScriptableObject [00:55].

¿Cómo defino la estructura de un ítem con un struct?

Los ítems de un RPG no son todos iguales: una espada tiene daño, una poción tiene curación. Por eso conviene crear una estructura fuera de la clase principal que agrupe los datos comunes [01:30].

Dentro del struct Item puedes incluir:

  • displayName: una string con el nombre visible del ítem.
  • itemType: un enum que define si es arma o poción.
  • icon: la imagen que representará al ítem en el juego.
  • damage: valor numérico para armas.
  • restoreAmount: cantidad de vida que recupera una poción.

Para el enum ItemType defines dos valores iniciales: armas y pociones. Visual Studio te genera la plantilla automáticamente cuando escribes public enum y presionas tabulación dos veces [02:05].

Un detalle útil es proteger los valores numéricos. Por ejemplo, restoreAmount no debería ser negativo, así que le asignas un atributo que defina el mínimo en cero. Así evitas errores cuando alguien edite los datos en el inspector.

¿Cómo hago que el Scriptable Object aparezca en el menú de Unity?

Para que tu Scriptable Object sea creable desde el editor, necesitas el atributo CreateAssetMenu justo encima de la clase. Este atributo le dice a Unity dónde colocar la opción dentro del menú contextual [03:20].

El atributo recibe dos parámetros importantes:

  • fileName: el nombre por defecto del asset al crearlo, por ejemplo Item.
  • menuName: la ruta donde aparecerá la opción, como Tools/Scriptables/Items.

Una vez guardado, vuelves al editor, haces clic derecho en la carpeta de Assets, vas a Create y verás la nueva opción Tools. Desde ahí creas tu primer ítem, que aparece como un pequeño cuadro azul listo para editar.

¿Por qué mi ScriptableObject no muestra los campos en el inspector? Porque el struct no está serializado por defecto. Necesitas agregar el atributo [System.Serializable] encima de la estructura para que Unity exponga sus campos en el inspector.

¿Cómo serializo correctamente la estructura del ítem?

Aunque la variable item esté declarada como [SerializeField] private, eso no basta si el struct en sí no está marcado como serializable [04:40].

La solución es agregar el atributo [System.Serializable] justo antes de la declaración del struct Item. Con esto, Unity entiende que debe mostrar todos los campos internos cuando edites el asset en el inspector.

Al volver al editor, abres tu ítem y ya puedes:

  • Escribir el nombre que quieras, como Espada o Poción de Vida.
  • Elegir el tipo desde el desplegable del enum.
  • Asignar el ícono arrastrándolo desde la carpeta importada.
  • Definir daño o cantidad de curación según corresponda.

¿Qué puedo hacer ahora con mi base de datos de ítems?

Con la base lista, puedes empezar a poblar tu proyecto creando varios assets: una espada, un escudo, una poción de vida, una poción de maná. Cada uno vivirá como archivo independiente dentro de la carpeta Scriptables, lo que facilita organizarlos y referenciarlos desde otros scripts.

Una buena práctica es agruparlos en una lista dentro de otro Scriptable Object que actúe como inventario maestro. Así centralizas todo el catálogo del juego en un solo lugar y lo referencias desde el sistema de inventario, la tienda o el sistema de loot.

Anímate a diseñar tus propios objetos, ponles los íconos que más te gusten y experimenta con nuevos campos como rareza, precio o nivel mínimo requerido. ¿Qué tipo de ítems vas a agregar primero a tu RPG?