TEMA 6 OBJETOS SCRIPTABLES

Sin valoraciones

TEMA 6 OBJETOS SCRIPTABLES

El ScriptableObject es una clase que nos permite almacenar grandes cantidades de datos com­partidos independientes de instancias de script. No confunda esta clase con la muy similar Seria- lizableObject, la cual es una clase del editor y llena un propósito diferente.

Considere por ejemplo que usted ha hecho un prefab con un script que tiene un arreglo de mi­llones de enteros. El arreglo ocupa 4MB de memoria y su dueño es el prefab. Cada vez que usted instancia el prefab, usted va a obtener una copia de ese arreglo. Si usted ha creado 10 game ob- jects, entonces usted terminaría con 40MB de datos del arreglo para las 10 instancias.

Unity serializa todos los tipos primitivos, strings, arreglos, listas, tipos específicos para Unity tal como Vector3 y sus clases personalizadas con el atributo Serializable como copies pertenecien­do al objeto en el cual fue declarado. Esto significa que si usted ha creado un ScriptableObject y almacena millones de enteros en un arreglo, entonces declara que el arreglo será almacenado con la instancia. Las instancias son pensadas en sus propios datos individuales. Los campos Scripta­bleObject, o cualquier campo UnityEngine.Object, tal como MonoBehaviour, Mesh, GameObject y así, son almacenados por referencia opuesto a un valor. Si usted tiene un script con una refe­rencia al ScriptableObject con un millón de enteros, Unity va a solamente guardar una referen­cia al ScriptableObject en los datos de script. El ScriptableObject por el contrario, almacenada el arreglo. 10 instancias de un prefab que tiene una referencia ScriptableObject , que mantiene 4MB de datos, va a pesar en total 4MB y no 40MB como se discutio en el otro ejemplo.

El caso intencionado para utilizar el ScriptableObject es reducir el uso de memoria al evitar la copias de valores, pero usted también puede utilizarlo para definir conjuntos de datos conec­ta-bles. Un ejemplo de esto sería imaginar una tienda NPC en un juego RPG. Usted puede crear múltiples assets de su ScriptableObject ShopContents personalizado, cada uno definiendo un conjunto de items que están disponibles para compra. En un escenario dónde el juego tiene tres zonas, cada zona puede ofrecer diferentes tipos de items. El script de su tienda podría referenciar un objeto ShopContents que define qué items están disponibles.

A continuación vamos a importar un scriptable object desde la pestaña del Asset Store de Unity. Para ello deberemos abrir nuestra cuenta en la ventana Asset Store. Si no la tene­mos abierta nos dirigimos a Window>Asset Store y la acoplamos a cualquiera de las venta­nas que nos resulte comodo para interactuar con ella.

TEMA 6 OBJETOS SCRIPTABLES Una vez abierta nuestra tienda de assets deberemos entrar con nuestra cuenta de unity para poder descargar el paquete de los objetos scriptable que vamos a utilizar a continuación.
Deberemos de buscar nuestro objeto escriptable desde el buscador de assets que aparece con una lupa.
Ponemos scriptable object en cuadro de texto que se encuentra a la derecha de dicha lupa.

 

 

Elegimos el que aparece en la imagen. Es gratuito. Al clicar sobre el solo tendremos que dar a descargar

TEMA 6 OBJETOS SCRIPTABLES

Una vez descargado, nos venimos a Unity y desde el menu Window>Package Manager y dentro de este elegir la opción de My assets e importar nuestro objeto escriptable a nuestro proyecto

Le damos primero a download y despues a Import. Dejamos que cargue y ya lo tenemos en nuestro proyecto para poder trabajar con él.

TEMA 6 OBJETOS SCRIPTABLES

Ahora vamos a crear una carpeta donde almacenaremos estos objetos escriptables. Nos vamos a Assets y dentro creamos una carpeta a la cual llamaremos ScriptableObjects

TEMA 6 OBJETOS SCRIPTABLES

Dentro de ella haremos tres carpetas una llamada Events otra Levels y otra Scenes. Aquí vamos
a guardar los objetos progamables, los assets que contienen los datos.

TEMA 6 OBJETOS SCRIPTABLES

Luego nos vamos a la carpeta de Script y creamos las siguientes carpetas que aparecen en la imagen que hay a continuación. Tenéis el contenido de las carpetas dentro de la carpeta de material llamada Proyecto Final. Solo tendréís que arrastrar su contenido a estas carpetas que hemos creado. Desde el directorio de Assets del proyecto que está en formato Zip

TEMA 6 OBJETOS SCRIPTABLES

Si abrimos la carpeta de GameArchitecture nos encontramos con estas carpetas que contienen los programas que van a definir el comportamiento de nuestro juego, el cambio de escenas, los diálogos entre personajes, los controles y movimientos de cada parte del juego.

TEMA 6 OBJETOS SCRIPTABLES

Ahora abrimos la carpeta ScriptableObjects y en la subcarpeta Levels tenemos dos carpetas una llamada
House y la otra Town. Dentro de House vamos a crear un scriptableObject. Clic botón derecho
y elegimos la opción de ScriptableObject>Scene

TEMA 6 OBJETOS SCRIPTABLES

Lo llamamos House tanto en el directorio como en el inspector

TEMA 6 OBJETOS SCRIPTABLES

Y ahora vamos a hacer lo misom pero para añadir una entrada de nivel. Clic botón derecho>Create>Scriptable Object>Level>Level Entrance

TEMA 6 OBJETOS SCRIPTABLES

Pasamos a llamar a este archivo House Entrance

TEMA 6 OBJETOS SCRIPTABLES

Repetimos el proceso para Town, creamos dos scriptable Objects uno que sea de tipo scene y otro de tipo level Entrance.

TEMA 6 OBJETOS SCRIPTABLES

Ahora añadimos tres entradas mas a nuestro Town. Ya que va a ver cuatro entradas a la escena de Town. Una entrada en el extremo izquierdo del mapa, otra entrada en el extremo derecho. Otra para entrar en la casa y una cuarta para acceder a un nivel de batalla de nuestro juego. Se ven en la siguiente imágen donde estarán colocadas cada vez que queramos llamar a otra escena desde estos objetos escriptables(programables)

TEMA 6 OBJETOS SCRIPTABLES

TEMA 6 OBJETOS SCRIPTABLES

Volvemos a la carpeta principal de Scriptable Objects y creamos con el botón derecho Create>Scriptable Object>Player Path

TEMA 6 OBJETOS SCRIPTABLES

Ahora vamos a hacer que nuestras escenas carguen lo que necesiten. Para ello vamos a ver el script SceneInicializer, que se encuentra dentro de Scripts>Level

TEMA 6 OBJETOS SCRIPTABLES

En la parte superior se nos carga lo que utiliza Unity para que se cargue la pro­gramación. En este caso el programa necesita usar los llamados UnityEngine que cargan una serie de funcionalidades a nuestro código. El más importante es el que pone UnityEngine.SceneManagement ya que este permite que podamos cambiar de escenas dentro de nuestro juego.

TEMA 6 OBJETOS SCRIPTABLES

En estas líneas de código lo que estamos es creando el comportamiento de carga de escenas cuando nuestro Player pase por las entradas que definamos desde la escena Town cambie a la escena que le digamos desde las dependen­cias que pondremos desde la ventana Inspector.

 

 

Los ScriptableObjects son una característica poderosa de Unity que te permite crear objetos personalizados que contienen datos y funcionalidades reutilizables sin la necesidad de crear instancias de clases MonoBehaviour:

1. Crear un ScriptableObject:

1.1. Crear ScriptableObject:

  • Crea una nueva clase que herede de ScriptableObject.
csharp
using UnityEngine; [CreateAssetMenu(fileName = "NuevoObjetoScriptable", menuName = "Scriptables/ObjetoScriptable")] public class ObjetoScriptable : ScriptableObject {public string nombre; public int valor; public Sprite icono; }

1.2. Añadir Datos:

  • Define las variables y datos que deseas incluir en tu ScriptableObject.

2. Crear Instancia del ScriptableObject:

2.1. Crear Instancia:

  • Haz clic derecho en el Assets, selecciona «Create» -> «Scriptables» y elige tu ScriptableObject.
  • Configura los datos en la nueva instancia.

3. Utilizar el ScriptableObject en un Script:

3.1. Referenciar el ScriptableObject:

  • Puedes referenciar tu ScriptableObject en cualquier script MonoBehavoir, como en un GameManager.
csharp
public class GameManager : MonoBehaviour { public ObjetoScriptable objetoScriptable; voidStart() { Debug.Log("Nombre del Objeto: " + objetoScriptable.nombre); Debug.Log("Valor del Objeto: " + objetoScriptable.valor); } }

3.2. Asignar el ScriptableObject:

  • Arrastra y suelta la instancia del ScriptableObject en el campo público del inspector del GameManager.

4. Uso Avanzado: Listas de ScriptableObjects:

4.1. Crear una Lista:

  • Puedes crear listas de ScriptableObjects en otros ScriptableObjects o en scripts MonoBehavoir.
csharp
public class ContenedorDeObjetos : ScriptableObject { public List<ObjetoScriptable> objetos = new List<ObjetoScriptable>(); }

4.2. Configurar y Utilizar la Lista:

  • Configura y utiliza la lista de ScriptableObjects en el inspector o en tiempo de ejecución.

5. Beneficios de los ScriptableObjects:

5.1. Reutilización:

  • Puedes reutilizar ScriptableObjects en varios lugares sin duplicar código.

5.2. Configuración en el Inspector:

  • Puedes ajustar los datos de los ScriptableObjects en el inspector de Unity.

5.3. Fácil de Versionar:

  • Los ScriptableObjects son serializables, lo que facilita el versionamiento y la colaboración.

5.4. Centralización de Datos:

  • Puedes centralizar datos compartidos entre diferentes objetos y sistemas en un solo ScriptableObject.

6. Ejemplo de Configuración en el Inspector:

6.1. Añadir en el Inspector:

  • Configura variables y atributos visibles en el inspector.
csharp
[CreateAssetMenu(fileName = "NuevoObjetoScriptable", menuName = "Scriptables/ObjetoScriptable")] public class ObjetoScriptable : ScriptableObject { [Header("Configuración del Objeto")] public string nombre; public int valor; publicSprite icono; }

Compártelo en tus redes

Share on facebook
Share on twitter
Share on linkedin
Share on pinterest

Valore este curso

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestra web. Si sigues utilizando este sitio asumimos que estás de acuerdo. VER