Antes de comenzar a describir los elementos de Unity empleados en el simulador, se debe comprender cuál es la estructura de cualquier proyecto desarrollado en este editor.[22] De forma obligatoria, todos los proyectos se estructuran en diferentes escenas (Scenes) y es obligatorio que exista al menos una. Una escena contiene el entorno y los menús de nuestro
programa en una situación determinada. Teniendo en cuenta que Unity es un motor enfocado al
desarrollo de videojuegos, podemos describir una escena como un nivel de uno de ellos, en la cual se colocarán los obstáculos que deban ser sorteados, las decoraciones, los personajes con los que interaccionar, etc. Estas escenas están creadas con el objetivo de poder desarrollar nuestro proyecto en pequeñas unidades separables y, después, juntarlas para generar el resultado completo. En nuestro simulador no son necesarias varias escenas, pues todas las acciones se desarrollan en un mismo entorno. Por tanto, tendremos una única escena que contendrá la interfaz de usuario y todo el entorno de la matriz de elementos. También se incluye en esta escena la interfaz de visualización de resultados, en inicio desactivada, para ser utilizada en caso de necesitarla.[23] En un principio se planteó un cambio de escena para realizar esta tarea pero, dada la sencillez con la que podía implementarse todo en una escena individual, se dejó todo en la misma.
Dentro de cada escena tenemos diferentes GameObjects. El concepto de GameObject es
el más importante dentro de la estructura del editor Unity. Todo objeto dentro de una escena es
un GameObject, desde algo que represente a un elemento físico, como podría ser en nuestro caso
una máquina; hasta las cámaras, las luces o la interfaz de usuario. Sin embargo, un GameObject
por sí solo no es capaz de realizar ninguna tarea: necesita una serie de componentes (components) internos que lo completan. Estos componentes modifican las tareas y comportamientos del objeto y lo definen mediante una serie de parámetros, como por ejemplo su tamaño, su posición, si tienen un modelo 3D para ser dibujados por el motor, el código que ejecuten… Las posibilidades son infinitas. En nuestro simulador, dado que el enfoque y la intención principal no es crear un software muy decorado y bonito, sino funcional, eficiente y que
arroje buenos resultados, los GameObjects se mantienen bastante sencillos en cuanto a
componentes internos: se tienen únicamente aquellos que necesita Unity para poder
representarlos gráficamente y el código que deben ejecutar, siendo este último el elemento más importante en todos los casos.
Para poder integrar nuestro código como componente de los diferentes GameObjects de
nuestro simulador, bien sean parte de la interfaz o de los elementos físicos de la escena, debe
desarrollarse este código dentro de lo que Unity denomina scripts. Un script no es más que un
archivo de texto, en nuestro caso escrito en C# y con extensión “.cs”, que contendrá el código a
ejecutar por un GameObject. El script se conecta con los elementos internos del motor de Unity
a través de la implementación de una clase heredada de la incorporada al motor llamada
Monobehaviour. Es importante comprender que, para que nuestro código quede completamente
integrado en Unity, debemos heredar siempre de Monobehaviour.
Al crear un script dentro de la interfaz de Unity, pueden observarse diferentes cosas. La
generada y heredada de Monobehaviour. Para que el código quede completamente integrado como un componente, esta relación de igualdad entre el nombre del archivo y el de la clase ha de cumplirse siempre. La segunda circunstancia que se observa al crear el script es que la clase creada tiene inicialmente dos métodos declarados en su interior: Update y Start. Estos dos métodos son clave en el funcionamiento general de todo el programa:
• El método Update de cada script incluido como componente de cada GameObject que
exista en la escena es llamado en el momento de actualización de pantalla (frame refresh) que realiza el motor. Dentro de ella tendremos que desarrollar las acciones que queramos que se realicen de manera continua mientras la solución esté ejecutándose. En esencia, es el método que se ejecuta de forma cíclica mientras el simulador permanezca abierto.
• Por otro lado, el método Start es llamado cuando se crea el GameObject que tiene el script como componente. Su interior se ejecuta una única vez y se emplea normalmente para asignar una serie de valores iniciales a los diferentes elementos del script. En el
manual de uso de Unity se recomienda utilizar el método Start en lugar de constructores
para las clases heredadas de Monobehaviour.
Todos estos elementos aquí mencionados son básicos en cualquier proyecto realizado con este editor y forman la base sobre la que trabajar. A lo largo de este documento se mencionarán en repetidas ocasiones algunos de ellos. En la figura 3-2 podemos observar, de forma esquemática, la relación entre los diferentes componentes.
CAPÍTULO 3. HERRAMIENTAS UTILIZADAS
31