TEMA 6 OBJETOS SCRIPTABLES (continuación)

Sin valoraciones

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Ahora seleccionamos el objeto LevelInitializer y lo arrastramos a la carpeta de Assets>Prefabs>Level.

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Hecho esto deberemos crear una nueva escena que controle todos los elementos de cada escena dentro del juego y para ello nos vamos a la carpeta Scenes dentro de Assets y creamos una escena nueva la cúal la vamos a llamar Manager

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Hecha esta escena, abriremos la ventana Build Settings desde File y dentro colocaremos la escena Mana­ger la primera en la lista de escenas que aparece en la ventana de Scenes in Build

TEMA 6 OBJETOS SCRIPTABLES (continuación)

El siguiente paso será abrir nuestra carpeta de ScriptableObjects y dentro de ella venirnos a la carpeta Scenes abrirla y crear un nuevo objeto escriptable de tipo Scene. La llamaremos Managers en la carpeta de proyecto y desde el inspector también deberemos ponerle el mismo nombre

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Nos volvemos a la carpeta de Scenes dentro de assets y vamos a arrastrar la escena Managers a la ventana donde tenemos abierto Town. Quedando de esta manera:

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Eliminaremos el MainCamera que nos ha salido por defecto y posteriormente arrastramos el objeto EventSystem dentro de la escena Manager:

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Seleccionamos la escena Managers y guardamos los cambios con el comando Ctrl+S. Una vez guardado la eliminamos de la ventana de Jerarquía. Para ello desde la lista de puntos que se encuentra a su derecha desplegaremos una lista de opciones de la cúal elegimos que Remove Scene

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Ahora abrimos el objeto LevelInitializer desde el inspector seleccionamos la opción de las Dependencias y pulsamos en icono de + para buscar la dependencia que hemos creado antes llamada Managers.

TEMA 6 OBJETOS SCRIPTABLES (continuación)

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Con esto lo que hacemos es que se cargue la escena managers desde Town al iniciar el juego. Tendremos que hacer lo mismo con la escena de la Casa o House. Repetimos el proceso de la creación del objeto LevelInitializer con sus dos scripts y luego arrastramos todas las dependencias a cada apartado del script que tiene.

Vamos a construir ahora el sistema de carga de escenas para que nuestro player pueda entrar en la casa o en otras escenas que nosotros creemos anexas a nuestro videojuego que serán la composición del mismo a través de estos objetos programables, que hemos estado creando.

Para ello solo deberemos abrir la carpeta de Scripts dentro de este la carpeta de Managers y abrir un script que se llama ScreenLoadedManager

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Si lo abrimos nos encontramos con este código. Vamos a explicar la lógica que sigue este script.

Lo primero que tiene creado es un dato publico llamado LoadingScreenUI. Esta es una lógica de cargar escenas y decir que están cargadas. Es decir aquí le está diciendo que ha cargado y que por lo tanto el mo­tor de Unity tiene que poner la transición a la siguiente escena que aparezca.

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Por otro lado tenemos el LoadSceneRequest que es un script que se ha creado dentro de la carpeta Scripts GameArchitecture>Custom Types

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Que si lo abrimos nos encontramos que tiene dos variables. Una es la escena que se quiere cargar y otra es si quieres una transición al cargar dicha escena.

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Esta parte es muy importante ya que si no ponemos nada arriba no podremos ver nuestros datos desde la ventana del Inspector y no podremos modificarlos desde esa ventana en tiempo real.

Ahora volvemos a lectura del código de SceneLoaderManager donde vemos dos funciones públicas donde diferenciaremos sobre dos tipos de escena una será el Menu y la otra el Level

TEMA 6 OBJETOS SCRIPTABLES (continuación)

En el primer bloque le estamos diciendo que si no está cargada la escena de menú que cargue dicho bloque

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Sin embargo si es un Level, el código tiene que mirar si está cargada la escena que la active que son las dos primeras líneas de código

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Si no está cargada el código preguntara si lo que le estamos pidiendo es un LoadingScreen o no se lo estamos pidiendo. Si si se lo estamos pidiendo va a guardar esta petición como variable privada y tiene que mostrar una transición. Como la hemos guardado nos quedamos esperandola.

Y la otra es que cargue un evento llamado ToggleScreen que lo estamos llamando más abajo. Donde le es­tamos diciendo que si ya se ha cargado la transición y nosotros tenemos un pendingrequest, es decir hemos guardado una petición para alargarla entonces si empieza a cargarnos el nivel.

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Las siguientes líneas tenemos una serie de funciones privadas que una de ellas es la que vemos a continuación

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Lo que hace es ver si la escena con el nombre, el que sea, está cargada si esta cargada que aparezca en nuestra pantalla. Si loadedScene no es nuil y la escena está cargada nos va a devolver que es true es decir que aparezca en cambio si no se cumple esa condición que devuelva false es decir que no cargue dicha pantalla.

La siguiente línea de código lo que hace, basicamente, cargar nuestra escena

El programa se asegura que la request que le ha mandado tenga una escena. Activa la escena y posteriormente la carga en pantalla. Esta llamandola con el método GetActiveScene y luego nos la descarga con OnLoadSceneAsync. Es decir hemos mostrado la pantalla negra y por detrás estamos quitando la escena que está actualmente activa. Se elimina

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Aquí se le esta diciendo que la cargue, la escena nueva, asincrónicamente. Esto quiere decir que cuando se cargue dicha escena no rompa el juego por eso es importante que sea LoadSceneAsync

TEMA 6 OBJETOS SCRIPTABLES (continuación)

Como esta función es una corrutina, IEnumerator, en esta línea de codigos le estamos diciendo dque mientras se cargue dicha escena que espere mientras a terminar el proceso de carga.

Y cuando por fin ha cargado dicha escena saltamos a la siguiente línea de código:

TEMA 6 OBJETOS SCRIPTABLES (continuación)

 

 

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.

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