En esta conferencia, veremos cómo configurar múltiples naves de navegación y asignar caracteres de
diferentes tamaños a diferentes.
Esto te permitirá especificar dónde se pueden mover o no diferentes tipos de personajes. Para seguir, descargue el archivo
AgentSizesStarter que viene con esta conferencia y abra la escena BridgeTest.
En esa escena, encontrarás 2 personajes. Tenemos un guardia y tenemos una niña
y si simplemente giras, verás que también tenemos una pared del castillo con agujeros de diferentes tamaños.
Entonces, lo que haremos es hacer que la niña (que es el modelo más pequeño) atraviese esta estrecha abertura y asegurarse de
que el guardia no pueda pasar allí porque es demasiado grande.
Lo mismo para ese puente ... ella será lo suficientemente pequeña como para cruzar el puente, pero él no lo hará.
Lo primero que tendrás que hacer es configurar estos personajes para usarlos en Unity.
Estos son personajes que traje de Mixamo. He arreglado sus materiales, pero no he
hecho nada más, así que revisaremos toda la configuración para sus animaciones.
Lo primero que debe hacer es seleccionar cada modelo y configurarlo en Humanoid.
Así que selecciono Andrómeda (que es la niña) y
en el Inspector, quiero ir a 'Tipo de animación> Humanoide' y luego presionar [Aplicar].
Entonces quieres hacer lo mismo para la guardia del castillo ... selecciónelo en su proyecto y luego cree un Humanoide a
partir de él y presione [Aplicar].
Lo siguiente que debe hacer es configurarlos con su juego de strafe.
Ahora, este proyecto ya tiene incluidas las animaciones y los scripts para ese conjunto de strafe.
Abra la carpeta Animaciones y aquí encontrará el controlador de
animación 'Locomoción' creado por Unity. Seleccione castle_guard y en el Inspector encontrará que la ranura del controlador está actualmente vacía.
Ahí es donde desea arrastrar y soltar este LocomotionController, allí.
Haz lo mismo para Andrómeda también.
Así que solo selecciónela en la Jerarquía y arrastre y suelte ese LocomotionController sobre ella. A continuación, desea agregar el
script ClickToMove.
Entonces, si vamos a la carpeta Scripts, estos son los mismos que vienen con los caracteres para el conjunto de strafe.
Si selecciona su personaje (en este caso, Andrómeda), arrastraremos y soltaremos ClickToMove sobre ella y también
soltaremos el script LocomotionSimpleAgent.
No me preocuparé por el script LookAt.
Puede configurar LookAt si lo desea. Haz lo mismo para el castle_guard ... queremos arrastrar
ClickToMove y el script LocomotionSimpleAgent hacia allí.
Ahora eso agregará automáticamente el componente Nav Mesh Agent a cada uno porque
LocomotionSimpleAgent y ClickToMove lo requieren. Ahora también necesitamos hacer una malla de navegación de nuestro mapa. Por lo tanto, seleccione el
Mapa, luego queremos establecerlo en Navegación estática y todos los elementos secundarios que se encuentran debajo de él
porque eso incluiría el suelo y todo eso.
Acabo de notar que el puente en sí no es parte del mapa.
Voy a agregar eso allí y también podemos hacer que la navegación sea estática.
Así que seleccione el Mapa, vaya a la pestaña de Navegación (abra esa ventana si no lo tiene) e
iremos a Hornear y solo [Hornear] como está por defecto.
Entonces puedes ver que obtienes una malla de navegación que cubrirá todo y luego hay
una muy estrecha que cruza ese puente.
Si marca todos los enlaces, encontrará que hay suficientes pasos y tocar donde
se unen estas mallas.
Entonces, con esa configuración predeterminada, si
presionamos Reproducir y luego hacemos clic aquí, descubriremos que nuestros agentes dan un pequeño paseo para llegar al
otro lado.
Ahora, actualmente no hemos establecido diferentes tamaños para los diferentes agentes, todos son
el mismo agente predeterminado y todo eso se basa en el Tamaño del Agente Horneado que se encuentra en la Navegación.
Ahora, mientras lo estaba
ejecutando, es posible que hayas notado un poco de 'nerviosismo' en el movimiento de los personajes.
Echemos un vistazo más de cerca a eso.
En primer lugar, apaguemos el castle_guard solo para que no esté allí y haremos esto en Andromeda.
Así que seleccione Andromeda para que pueda ver su cilindro de agente de navmesh, así como ella y
luego presionaremos Reproducir y
lo que sucede en ese script es que está tratando de alinear las animaciones con el cilindro y cuando se pone
nervioso, usted ' Veré que ella realmente se adelanta a ese cilindro con sus animaciones ...
justo allí, puedes ver que eso sucede.
La razón es porque la animación es una animación en ejecución más rápida que la velocidad a la que está
permitiendo que se mueva ese agente.
Entonces, para solucionar eso, debes seleccionar el personaje en el Inspector y para su Nav Mesh Agent, aumentar su
Velocidad y eso contribuirá en gran medida
a solucionar esa inquietud. Así que hagamos que sea veloz 8.
Volveremos por el castillo_guard y lo volveremos a encender y cambiaremos su velocidad también a 8 y eso hará que el
movimiento para ellos sea mucho más suave.
Ahora puede cruzar el puente porque no tenemos restricciones de tamaño.
Lo que haremos ahora es crear un tipo diferente de agente y asignarlo al castillo_guard, así
que dejemos de jugar esto.
Luego, en la ventana de navegación en Agentes, crearemos otro tipo de agente.
Tenemos un humanoide allí, pero
haga clic en '+' para crear un nuevo agente y llamaremos a este Guardia y
luego modificaremos el tamaño.
Entonces hagamos que sea 1 ronda y
establezcamos su altura en 3. La altura del paso aún debería estar bien porque está bien para el personaje básico
(el humanoide) que dejaremos en el modelo de Andromeda.
Ahora para asignar esta 'Guardia' al castillo_guardia, haga clic
en el castillo_guard y vaya al Inspector.
Eche un vistazo a su componente Nav Nesh
Agent donde tiene el tipo de agente y es allí donde desea establecerlo en 'Guard'.
Entonces eso te da un tipo diferente.
Ahora, en este punto, si presionamos Reproducir, obtendremos un error común que la gente ha estado recibiendo,
así que presione Reproducir y haga clic aquí y obtendremos este error que dice 'SetDestination solo se puede invocar en un agente activo
que tiene sido colocado en una NavMesh '.
Lo cual es cierto, en el sentido de que el navmesh en
la Navegación (el que ha horneado) solo funciona en ese Humanoide predeterminado, pero tiene otro agente llamado 'Guardia' que USTED cree
que está sentado en ese mismo navmesh , pero UNITY dice "No, no lo sé".
Entonces, lo que debemos hacer es usar un código beta que se haya desarrollado y que aún no forme parte de Unity, pero
puede obtenerlo y ponerlo en Unity.
Entonces, en lugar de usar ESTE generador de navmesh, vamos a usar uno diferente.
Lo que quiero que hagas es traer el paquete que se llama 'AINavMeshComponents' que vino
con esta conferencia y voy a arrastrarlo y soltarlo en la carpeta Activos.
Ahora, hay
varios scripts diferentes que podemos aplicar. El que nos interesa es el
que nos permitirá tener múltiples navegaciones en nuestro mapa. Seleccione el padre del terreno (que en este caso es
nuestro mapa) y vaya al Inspector.
Queremos encontrar la carpeta Scripts que viene con nuestros componentes NavMeshComponents recién importados, que
está aquí y está buscando el script llamado NavMeshSurface y ese es el
que queremos arrastrar y soltar en nuestro mapa. También podemos seleccionar [Agregar componente] y encontrarlo también en esta lista.
De hecho, necesitamos 2 de ellos, así que pondremos otro allí. Queremos 1 superficie para el Humanoide y 1
superficie para la Guardia, por lo que esta parte superior podemos
dejarla como Humanoid y luego la siguiente hacia abajo, podemos establecerla como Guardia.
Ahora, si hace clic en [Hornear] para ambos, verá aparecer diferentes navmeshes y podrá verlos en colores
ligeramente diferentes.
Así que tienes uno aquí y tienes uno allí y también tienes
el viejo colgando del valor predeterminado. Si solo volvemos a la ventana de Navegación y [Borrar] esa, entonces no será un
problema para nosotros porque ya no la necesitamos.
Así que de vuelta en
el Inspector y podemos ver esos dos.
Ahora, lo que sucedió aquí es que el agua ha sido recogida como parte de nuestra red de navegación.
No queremos que se incluya el agua.
Entonces, en nuestra configuración de Nav Mesh Surface, podemos ir a 'Incluir capas' y
actualmente lo tiene todo, pero podemos bajar y seleccionar 'Agua' para desmarcarlo e ignorarlo y podemos hacer eso
en ambos tipos diferentes de mallas de navegación y luego [Hornear] los dos de vuelta.
Entonces verás que el agua ahora está excluida.
Por lo tanto, la Guardia (castle_guard) viajará en un navmesh y el Humanoid (Andromeda) viajará
en el otro y puedes ver por el puente que solo Andromeda puede viajar porque el agente de la Guardia es demasiado ancho.
Así que probemos esto.
Presionemos Play ... y descubriremos que si hacemos clic aquí, tenemos a Andrómeda cruzando el puente y
la Guardia atravesando el agua.
La otra cosa que tenemos también (si solo te acercas al castillo) es que Andrómeda puede pasar por debajo, a
través de esta pequeña parte del puente estrecho y ambos
pueden pasar por el más ancho.
Entonces, si vuelvo al juego y solo hago clic aquí, descubrirás que ella
pasará por el medio porque puede caber, mientras que él tiene que dar la vuelta al
exterior, pero si
los movemos a ambos aquí y luego preguntamos si vienen aquí, ambos atravesarán ese puente porque pueden caber.
Puede agregar tantas superficies de navmesh diferentes a su terreno como tenga diferentes tipos y esta es la única forma
en que PUEDE tener diferentes tipos de agentes. A pesar de que la ventana de
Navegación le permite tener múltiples tipos de agentes, a menos que use esas superficies, la navegación predeterminada que
horneará, usando esta parte aquí, no encontrará sus otros tipos de agentes y obtendrá (como vimos)
) errores.
Entonces eso está usando múltiples mallas y múltiples tamaños de agentes.