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

  1. En el menú de Unity, ve a Assets > Create > Character Stats.
  2. Asigna un nombre al nuevo objeto scriptable, por ejemplo, "WarriorStats".
  3. 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

  1. Crear un Objeto Scriptable para Configuración de Niveles:

    • Crea una clase LevelConfig que derive de ScriptableObject.
    • Añade variables públicas para levelName, difficulty, y maxEnemies.
  2. 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.
  3. Usar el Objeto Scriptable en un Script:

    • Crea un script LevelManager que tenga una referencia pública a LevelConfig.
    • En el método Start(), muestra los valores de levelName, difficulty, y maxEnemies en la consola.

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

  1. En el menú de Unity, ve a Assets > Create > Level Config.
  2. Asigna un nombre al nuevo objeto scriptable, por ejemplo, "Level1Config".
  3. 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

Módulo 2: Programación Básica en Unity

Módulo 3: Trabajando con Activos

Módulo 4: Física y Colisiones

Módulo 5: Interfaz de Usuario (UI)

Módulo 6: Audio en Unity

Módulo 7: Programación Avanzada

Módulo 8: Física Avanzada e IA

Módulo 9: Optimización y Rendimiento

Módulo 10: Publicación y Más Allá

© Copyright 2024. Todos los derechos reservados