5.3. Implementación de la metodología en las herramientas seleccionadas
5.3.14. Interacción del personaje con la búsqueda de caminos
1. Volver a Mono Develop e ingresar al Script ControlPersonajePrincipal. Declarar una variable pública de tipo Transform llamada flecha que servirá para indicar el camino correcto hacia el nodo fin. Declarar también una variable pública de tipo AStarManager llamada aStarManager que permitirá que se realice la búsqueda. Por último se crea una variable privada de tipo NodoEspacial llamada nodoCercano que referenciará al nodo más cercano del camino correcto.
Figura 129. Código para declarar variables para la interacción de personajes y búsqueda de caminos
2. Se añadirá al principio del método Update el código que buscará el nodo más cercano a la posición actual del personaje cuando se presione la tecla espacio y se asignará a la variable aStarManager este nodo cercano como nodo de inicio para la búsqueda de caminos. Se activará también la flecha que apuntará el camino correcto.
3. A continuación en el mismo método, se configura la flecha creada para siempre apunte correctamente hacia el nodo siguiente hasta llegar al fin del camino. Se pregunta si el nodoCercano es diferente a null, si es así se configurará la flecha para que apunte hacia la posición del nodoCercano y se calculará la distancia entre el personaje y el nodoCercano; si esta distancia es menor que un valor asignado (en este caso 3), al
nodoCercano se le asigna el siguiente nodo en el camino.
Si el nodoCercano es igual a null entonces se desactiva la flecha.
Figura 131. Código para configurar la flecha que dirige el personaje al nodo final
4. Guardar cambios y regresar a Unity. Importar el modelo de una flecha como se ha visto anteriormente y llevarlo hacia la Vista de Jerarquía. Renombrarla a flechaReferencia. Ir al Inspector y configurar los valores para que se ubique sobre el personaje.
5. En la Vista de Jerarquía arrastrar el objeto flechaReferencia dentro del personaje principal para que ésta siempre se ubique sobre el personaje.
Figura 133. Arrastrar la flecha dentro del personaje
6. En la Vista de Jerarquía se selecciona el personaje y en el Inspector se busca el componente ControlPersonajePrincipal. En el campo Flecha seleccionar flechaReferencia y en el campo AStarManager se selecciona aStar.
7. Seleccionar en la Vista de Jerarquía el objeto aStar y en el Inspector en el componente AStar Manager buscar el campo Fin y seleccionar cualquiera de los nodos previamente creados.
Figura 135. Asignar un nodo fin para probar el funcionamiento
8. Clic en ► para probar el funcionamiento. Al presionar la tecla espacio la flecha aparecerá sobre el personaje y señalará el camino correcto hacia el nodo asignado previamente como fin.
Figura 136. Flecha sobre el personaje indiacndo el camino hacia el nodo final
9. En la pestaña Game Object seleccionar Create Other y elegir Camera. Renombrar el objeto creado en la Vista de Jerarquía a CamaraBusqueda.
10. En la Vista de Escena con el mouse mover toda la escena creada hasta que se visualice por completo. En la Vista de Jerarquía seleccionar
CamaraBusqueda, ir a la Pestaña Game Object y clic en Align With View. De esta forma la cámara se posiciona y rota para que coincida con la que se ve en la Vista de Escena.
Figura 138. Posicionar la cámara Superior sobre la escena
11. En la Vista de Jerarquía seleccionar CamaraBusqueda y en el Inspector
deseleccionar el componente CamaraBusqueda que se encuentra en la parte superior.
Figura 139. Desactivar la cámara Superior creada
12. Crear un nuevo Script llamado SeleccionModoCamara en el cual se permitirá al usuario seleccionar la cámara con la que desea ver el Mundo Virtual. Para esto se declaran dos variables públicas de tipo GameObject, la primera llamada mainCamera y la otra camaraSuperior.
13. En el método Update se controlará que al presionar en el teclado la letra “C” el estado activo de la cámara actual se desactive activando la otra cámara existente.
Figura 141. Código para controlar la cámara deseada
14. Guardar cambios y volver a Unity. Crear un nuevo Script llamado RelacionEdificioNodo, el que servirá para determinar que nodo es el más cercano a cada edificio. Se crearán dos variables públicas, la primera de tipo NodoEspacial llamada nodoCercano y la otra es de tipo AStarManager y se la llamará aStarManager.
Figura 142. Código para crear variables para asignar un nodo a un edificio
15. Añadir el evento OnMouseDown el que permitirá que cuando se dé clic sobre el edificio al que se le agregará este Script, se designe como Fin para la búsqueda de camino el nodo más cercano al edificio.
Figura 143. Código para permitir que cuando se de clic en un edificio se añada como nodo fin la búsqueda
16. Volver a Unity y en la Vista de Jerarquía renombrar todos los objetos llamados obstáculo por Edificio y numerarlos.
17. Con todos los edificios seleccionados, en el Inspector en Add Componet
seleccionar Scripts y buscar RelacionEdificioNodo.
Figura 145. Añadir a los edificios el Script de RelacionNodoEdificio
18. Seleccionar en la Vista de Jerarquía cada uno de los edificios y en el Inspector buscar el componente Relacion Edificio Nodo. En el campo
AStar Manager asignar el objeto aStar y en el campo Nodo Cercano
asignar el nodo que se encuentre más cercano al edificio.
Figura 146. Añadir a los edificios el nodo más cercano
19. En la Vista de Jerarquía seleccionar el personaje y añadir el Script
SeleccionModoCamara en Add Component en el Inspector.
20. En el componente Selección Modo Camera; en la campo Main Camara
asignar el objeto Main Camera y en el campo Camara Superior asignar el objeto Camara Busqueda.
Figura 148. Asignar cada cámara a su campo correspondiente
21. Clic en ► y presionar “C”. Se puede apreciar el cambio de cámara de la Principal a la Superior y viceversa. Si se le da clic a un edificio y se presiona la tecla espacio, la flecha aparecerá y guiará al personaje al edificio seleccionado.
Figura 149. Vista de cada cámara