Recursos

Los scripts en Unity no siempre tienen que definir conceptos directamente relacionados a los juegos. También podemos usarlos para tener un acceso a datos o recursos que vamos a estar usando repetidamente, esto es una guía para aplicar un poco de lógica de software en nuestros juegos.

Un posible escenario donde esto puede ser útil es por ejemplo si tenemos un spawner de enemigos que es capaz de spawnear varios tipos diferentes de enemigos. La receta clásica nos dice que en el script que spawnea entidades tengamos nuestras prefabs asignadas a nivel público. Pero, si hacemos cambios en el script de spawner corremos el riesgo de que los valores del script se reseteen en el editor y si queremos tener varios spawners, vamos a tener mil referencias separadas a las prefabs de enemigos y se convierte en algo tedioso de mantener si eliminamos o agregamos enemigos del juego.

Podemos, en cambio, centralizar los recursos que vamos a estar accediendo seguido de una manera que sean fáciles de acceder. En este ejemplo, tengo una mini base de datos de autos controlados por la IA y sus ids. El id puede ser un número, una string, un enum, un objeto o lo que quieran, mientras que sea único dentro de la base de datos.

 

CarRefsEditor
Pares de ids y prefabs generan una base de datos indentada

Cada ítem del array es una correlacion entre el id único del auto y la prefab. A la misma vez, en otras partes del código, el id de cada auto va a estar vinculado con su metadata, haciendo posible que se cree una combinación de datos y objetos atados por un único Id.
A nivel de código necesitamos crearnos una clase serializable que contenga estos dos elementos, el Id y la Prefab. Considerando que este tipo de dato se va a poder usar en varios lados con varios contextos es mejor darle un nombre mas genérico.

PrefabIdPair
Entidad de datos que referencia una prefab con su ID

Luego es tan fácil como definir un array del tipo PrefabIdPair en nuestro script de recursos

CarRefs
Definición de un array con objeto visible desde el editor, mientras que el tipo del array sea Serializable, se va a poder ver en el editor.

Luego podemos ubicar este script de recursos/base de datos en un objeto de la escena que sea estilo Director, y que sea de fácil acceso usando las Referencias Globales. Una de las funciones que seguramente haya que implementar sea la de obtener un ítem por su id.

GetPrefab
Como obtener un elemento de la colección por medio del ID

Volviendo al ejemplo del spawner, ahora tenemos un elemento en la escena que actúa como una base de datos de prefabs, por ende, en el spawner podemos poner lógica para saber qué tipo de enemigo tiene que generar y podemos llamar a la colección centralizada para obtener la prefab a instanciar. Esto nos permite tener un único lugar donde estén las referencias de los enemigos lo cual hace que sea muy fácil de mantener a medida que el proyecto cambia.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s