Introducción
Los Objetos Scriptables (Scriptable Objects) en Unity son una poderosa herramienta para almacenar datos de manera independiente a los GameObjects. Permiten crear activos que contienen datos y lógica, que pueden ser reutilizados en diferentes partes del juego sin necesidad de duplicar código o datos. Son especialmente útiles para la configuración de datos, como estadísticas de personajes, configuraciones de niveles, y más.
Conceptos Clave
- ScriptableObject: Clase base de la que derivan todos los objetos scriptables.
- Asset: Un archivo que contiene datos que pueden ser utilizados en el juego.
- Instanciación: Proceso de crear una instancia de un objeto scriptable.
Creación de un Objeto Scriptable
Paso 1: Crear la Clase ScriptableObject
Primero, crearemos una clase que derive de ScriptableObject
. Esta clase contendrá los datos que queremos almacenar.
using UnityEngine; [CreateAssetMenu(fileName = "NewCharacterStats", menuName = "Character Stats", order = 1)] public class CharacterStats : ScriptableObject { public string characterName; public int health; public int attackPower; public int defense; }
Explicación del Código
- [CreateAssetMenu]: Atributo que permite crear una instancia del objeto scriptable desde el menú de Unity.
fileName
: Nombre predeterminado del archivo.menuName
: Ruta en el menú de creación.order
: Orden en el menú de creación.
- CharacterStats: Clase que hereda de
ScriptableObject
. - Variables Públicas:
characterName
,health
,attackPower
,defense
son los datos que queremos almacenar.
Paso 2: Crear una Instancia del Objeto Scriptable
- En el menú de Unity, ve a Assets > Create > Character Stats.
- Asigna un nombre al nuevo objeto scriptable, por ejemplo, "WarriorStats".
- Selecciona el objeto creado y edita sus propiedades en el Inspector.
Paso 3: Usar el Objeto Scriptable en un Script
Para utilizar el objeto scriptable en un script, necesitamos referenciarlo en un componente de un GameObject.
using UnityEngine; public class Character : MonoBehaviour { public CharacterStats characterStats; void Start() { Debug.Log("Character Name: " + characterStats.characterName); Debug.Log("Health: " + characterStats.health); Debug.Log("Attack Power: " + characterStats.attackPower); Debug.Log("Defense: " + characterStats.defense); } }
Explicación del Código
- Character: Clase que hereda de
MonoBehaviour
. - characterStats: Referencia pública al objeto scriptable
CharacterStats
. - Start(): Método que se ejecuta al inicio del juego, donde se accede y muestra la información del objeto scriptable.
Ejercicio Práctico
Ejercicio 1: Crear y Usar un Objeto Scriptable
-
Crear un Objeto Scriptable para Configuración de Niveles:
- Crea una clase
LevelConfig
que derive deScriptableObject
. - Añade variables públicas para
levelName
,difficulty
, ymaxEnemies
.
- Crea una clase
-
Crear una Instancia del Objeto Scriptable:
- Usa el menú de Unity para crear una instancia de
LevelConfig
. - Asigna valores a las propiedades en el Inspector.
- Usa el menú de Unity para crear una instancia de
-
Usar el Objeto Scriptable en un Script:
- Crea un script
LevelManager
que tenga una referencia pública aLevelConfig
. - En el método
Start()
, muestra los valores delevelName
,difficulty
, ymaxEnemies
en la consola.
- Crea un script
Solución
Paso 1: Crear la Clase LevelConfig
using UnityEngine; [CreateAssetMenu(fileName = "NewLevelConfig", menuName = "Level Config", order = 1)] public class LevelConfig : ScriptableObject { public string levelName; public string difficulty; public int maxEnemies; }
Paso 2: Crear una Instancia del Objeto Scriptable
- En el menú de Unity, ve a Assets > Create > Level Config.
- Asigna un nombre al nuevo objeto scriptable, por ejemplo, "Level1Config".
- Selecciona el objeto creado y edita sus propiedades en el Inspector.
Paso 3: Usar el Objeto Scriptable en un Script
using UnityEngine; public class LevelManager : MonoBehaviour { public LevelConfig levelConfig; void Start() { Debug.Log("Level Name: " + levelConfig.levelName); Debug.Log("Difficulty: " + levelConfig.difficulty); Debug.Log("Max Enemies: " + levelConfig.maxEnemies); } }
Conclusión
Los objetos scriptables son una herramienta esencial en Unity para la gestión de datos. Permiten separar la lógica de los datos, facilitando la reutilización y el mantenimiento del código. En este módulo, aprendimos a crear, instanciar y utilizar objetos scriptables, lo que nos permitirá manejar datos de manera más eficiente en nuestros proyectos de Unity.
En el próximo tema, exploraremos los editores personalizados y los gizmos, que nos permitirán extender la funcionalidad del editor de Unity y mejorar nuestra productividad.
Curso de Unity
Módulo 1: Introducción a Unity
- Introducción a Unity e Instalación
- Descripción General de la Interfaz de Unity
- Creando Tu Primer Proyecto
- Objetos de Juego Básicos y Componentes
Módulo 2: Programación Básica en Unity
- Introducción a C# para Unity
- Creación y Adjunto de Scripts
- Entendiendo MonoBehaviour
- Manejo Básico de Entradas
Módulo 3: Trabajando con Activos
- Importación y Gestión de Activos
- Uso de la Tienda de Activos
- Creación y Uso de Prefabs
- Animación Básica
Módulo 4: Física y Colisiones
- Introducción a la Física en Unity
- Cuerpos Rígidos y Colisionadores
- Detección Básica de Colisiones
- Uso de Materiales Físicos
Módulo 5: Interfaz de Usuario (UI)
- Introducción a la UI de Unity
- Creación y Personalización de Elementos UI
- Manejo de Eventos UI
- Creación de Menús y HUDs
Módulo 6: Audio en Unity
- Introducción al Audio en Unity
- Importación y Uso de Clips de Audio
- Programación Básica de Audio
- Audio 3D y Sonido Espacial
Módulo 7: Programación Avanzada
- Conceptos Avanzados de C# para Unity
- Corutinas y Programación Asíncrona
- Objetos Scriptables
- Editores Personalizados y Gizmos
Módulo 8: Física Avanzada e IA
- Técnicas Avanzadas de Física
- Búsqueda de Caminos y Navegación
- Programación Básica de IA
- Máquinas de Estado y Árboles de Comportamiento
Módulo 9: Optimización y Rendimiento
- Técnicas de Perfilado y Optimización
- Gestión de Memoria
- Reducción de Llamadas de Dibujo
- Optimización de Física y Colisiones