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,defenseson 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
LevelConfigque 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
LevelManagerque tenga una referencia pública aLevelConfig. - En el método
Start(), muestra los valores delevelName,difficulty, ymaxEnemiesen 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
