Diferencia entre revisiones de «Unity NavMesh»
Ir a la navegación
Ir a la búsqueda
| Línea 51: | Línea 51: | ||
* El NavMesh o Navigation Mesh es el componente con el que vamos a definir el área que es 'utilizable' por los enemigos para poder desplazarse. | * El NavMesh o Navigation Mesh es el componente con el que vamos a definir el área que es 'utilizable' por los enemigos para poder desplazarse. | ||
| + | |||
| + | * '''<u>NOTA IMPORTANTE:</u>''' Para que una superficie forme parte del NavMesh es necesario que sea de tipo '''Static Navigation'''. | ||
| + | : En nuestro ejemplo, queremos que el plano forma parte del NavMesh, por lo que debemos ir a la ventana Inspector y comprobar que, al menos, esté marcada la opción indicada: | ||
| + | [[Imagen:Unity3d_navmesh_5.jpg|600px|center]] | ||
| + | |||
| + | |||
| + | |||
* Cuando creamos un NavMesh estamos creando la superficie sobre la que los enemigos van a poder desplazarse. Esta superficie es 'precalculada' y guardada por Unity y es por lo que se conoce como '''Baking''' un NavMesh (al igual que tenemos el proceso de Bake sobre las luces para precalcular las sombras generadas). | * Cuando creamos un NavMesh estamos creando la superficie sobre la que los enemigos van a poder desplazarse. Esta superficie es 'precalculada' y guardada por Unity y es por lo que se conoce como '''Baking''' un NavMesh (al igual que tenemos el proceso de Bake sobre las luces para precalcular las sombras generadas). | ||
| Línea 59: | Línea 66: | ||
| + | Al abrir la ventana Navigation aparecerá en la 'Inspector Window' una nueva pestaña ('''Navigation''') formada por 4 pestañas. En la '''pestaña Bake''' disponemos de las propiedades que van a conformar nuestra superficie 'caminable'. | ||
| + | [[Imagen:Unity3d_navmesh_5.jpg|800px|center]] | ||
| + | |||
| + | :* '''Agent Radius''': Indica a que distancia (medio metro) los enemigos deben de parar cuando lleguen a su destino o choquen con un obstáculo. | ||
| + | :* '''Agent Height''': Indica la altura (2 metros) que quedará libre de cualquier otro enemigo o protagonista. | ||
| + | :* '''Max Slope''': Indica en grados (45 grados) la inclinación máxima de un obstáculo por el cual el enemigo va a poder caminar. | ||
| + | :* '''Step Height''': Altura (0,4 metros) que es considirada como un escalón por el cual el enemigo va a poder subir. En el ejemplo, un obstáculo de más de 0.4 metros no podría ser caminable. | ||
| + | |||
| + | |||
| + | : La sección '''Generated Off Mesh Links''' hace referencia a la posibilidad de 'conectar' diferentes puntos de un NavMesh. | ||
| + | [[Imagen:Unity3d_navmesh_7.jpg|400px|center]] | ||
| + | : Más información [https://docs.unity3d.com/2018.4/Documentation/Manual/class-OffMeshLink.html en este enlace]. | ||
| + | |||
| + | : La sección '''Advanced''' se puede consultar [https://docs.unity3d.com/2018.4/Documentation/Manual/nav-AdvancedSettings.html en este enlace]. | ||
| + | |||
| + | |||
| + | * Una vez conformadas las características de nuestro NavMesh tendremos que hacer el proceso de '''Bake''' para que Unity calcule la superficie caminable de nuestra escena, presionando el botón '''Bake''': | ||
| + | <gallery caption="Creando un NavMesh" widths="350" heights="300px" perrow="2"> | ||
| + | Image:Unity3d_escala_3.jpg| Escogemos la opción '''Escala''' de la '''Barra de herramientas'''. | ||
| + | Image:Unity3d_escala_4.jpg| Presionamos con el botón izquierdo del ratón uno de los ejes (el que queramos modificar la escala) y sin soltar, movemos el ratón. Podemos observar como el valor en la ventana Inspector se modifica. | ||
| + | </gallery> | ||
<br /> | <br /> | ||
Revisión del 08:20 4 jul 2019
Introducción
- Más información en:
- Uno de los problemas a los que nos podemos enfrentar al desarrollar un juego es de dotar de inteligencia a los enemigos y que sean capaces de 'esquivar' los obstáculos de un escenario mientras intentan coger a nuestro protagonista.
- Podríamos intentar hacerlo nosotros, ya que vimos en esta Wiki el uso del vector dirección y podríamos hacer que los enemigos calcularan dicho vector con respecto al jugador y que se movieran hacia él.
- El problema que tendríamos es que si existen obstáculos entre el enemigo y el jugador, quedarían atrapados, como se observa en la siguiente escena:
- Si tuviéramos que programarlo podría ser muy laborioso.
- Para solucionarlo, Unity ofrece el sistema de navegación inteligente: Navigation System.
- Este componente va a permitir definir mediante una serie de parámetros que área de nuestra escena es 'caminable' por los enemigos.
- Por ejemplo, podremos definir que las zonas elevadas más de X grados no sean navegables (por tanto serían un muro) o que las bajadas o subidas de desnivel a partir de un tamaño no sean accesibles (formarían otro muro).
- Una vez creado el Navigation, asociamos a cada enemigo un NavMesh Agent el cual hará que dicho enemigo vaya 'detrás' del protagonista esquivando los posibles objetos que encuentre por el camino.
Preparando la escena
- Vamos a preparar una escena para mostrar el uso de este componente.
- Los gráficos son utilizados de otras partes de este manual de la Wiki. Si no dispones de ellos no pasa nada. Puedes emplear los que tengas disponibles llegados a este punto de la Wiki y como último recurso puedes emplear figuras básicas como Cubos o Esferas.
- Creamos una nueva escena o un nuevo Empty GameObject, sobre el que situaremos todos los gameobjects siguientes.
- Un plano de dimensiones 5x1x5 y un material con una textura color Rojo asocicada (si ya habéis visto como crear un Terrain podríais hacer uso de uno).
- Dos vallas que conformarán los obstáculos.
- Un Jeep que será nuestro protagonista.
- Un taque que será nuestro enemigo.
- El tanque viene rotado por lo que el eje-Z del mismo no se corresponde con el eje-Z del mundo.
- Para solucionarlo, creamos un Empty GameObject y dentro del mismo ponemos el tanque con el eje-Y rotado -90 grados.
- Preparando la escena
- El NavMesh o Navigation Mesh es el componente con el que vamos a definir el área que es 'utilizable' por los enemigos para poder desplazarse.
- NOTA IMPORTANTE: Para que una superficie forme parte del NavMesh es necesario que sea de tipo Static Navigation.
- En nuestro ejemplo, queremos que el plano forma parte del NavMesh, por lo que debemos ir a la ventana Inspector y comprobar que, al menos, esté marcada la opción indicada:
- Cuando creamos un NavMesh estamos creando la superficie sobre la que los enemigos van a poder desplazarse. Esta superficie es 'precalculada' y guardada por Unity y es por lo que se conoce como Baking un NavMesh (al igual que tenemos el proceso de Bake sobre las luces para precalcular las sombras generadas).
- Para crear un NavMesh debemos ir a al menú principal Window => AI => Navigation
Al abrir la ventana Navigation aparecerá en la 'Inspector Window' una nueva pestaña (Navigation) formada por 4 pestañas. En la pestaña Bake disponemos de las propiedades que van a conformar nuestra superficie 'caminable'.
- Agent Radius: Indica a que distancia (medio metro) los enemigos deben de parar cuando lleguen a su destino o choquen con un obstáculo.
- Agent Height: Indica la altura (2 metros) que quedará libre de cualquier otro enemigo o protagonista.
- Max Slope: Indica en grados (45 grados) la inclinación máxima de un obstáculo por el cual el enemigo va a poder caminar.
- Step Height: Altura (0,4 metros) que es considirada como un escalón por el cual el enemigo va a poder subir. En el ejemplo, un obstáculo de más de 0.4 metros no podría ser caminable.
- La sección Generated Off Mesh Links hace referencia a la posibilidad de 'conectar' diferentes puntos de un NavMesh.
- Más información en este enlace.
- La sección Advanced se puede consultar en este enlace.
- Una vez conformadas las características de nuestro NavMesh tendremos que hacer el proceso de Bake para que Unity calcule la superficie caminable de nuestra escena, presionando el botón Bake:
- Creando un NavMesh
-- Ángel D. Fernández González -- (2018).

