Cómo usar Unity para encontrar rutas y navegar en juegos
La mayoría de los juegos MMO actuales tienen función de búsqueda automática de rutas. Haz clic en una ubicación de la escena y el personaje encontrará automáticamente el camino hasta allí. Puede haber muchos obstáculos en el medio, y el personaje los sorteará automáticamente y eventualmente llegará al final. Al utilizar Unity para desarrollar juegos móviles, la búsqueda automática de rutas se puede implementar de muchas maneras.
Recientemente, un desarrollador extranjero compartió en su blog su experiencia en el uso del motor Unity para rehacer la navegación de búsqueda de rutas de un juego Flash previamente desarrollado. Espera que pueda ser útil para todos:
Hola a todos, recientemente estuve ocupado recreando un juego Flash de 2006 usando el motor Unity. Aunque hemos estado trabajando en el proyecto "Arrival in Hell" durante más de un año, quiero escribirlo desde cero aquí. blog, porque esto puede dar a los lectores una impresión más completa.
Si no estás familiarizado con este juego, déjame darte unas palabras de introducción. Estamos rehaciendo un juego Flash desarrollado por mis amigos Eduardo Mojica y Richard Rout en 2006. Este es un punto. Juego de aventuras and-click que reharemos usando el motor Unity. He estado programando y desarrollando juegos durante unos diez años, pero este es el primer juego que hago usando el motor Unity.
Antes que nada, lo primero de lo que quiero hablar es del movimiento del personaje del jugador. Dado que este juego ahora es verdaderamente 3D, el personaje del jugador necesita encontrar su camino en el espacio 3D. Afortunadamente, el motor de Unity ya tiene algunas buenas capacidades integradas de búsqueda de rutas. Simplemente abre la ventana - Navegación, selecciona los objetos que deseas usar y colócalos en la ruta, luego márcalos como 'Navegación estática'. Esto indica. Unidad de que estos objetos son estáticos (no se mueven) y deben tenerse en cuenta al buscar el camino.
Establezca el objeto como 'Navegación estática'
Aquí quiero hablar sobre lo poderosa que es esta función. En el pasado, yo, como la mayoría de los desarrolladores de juegos, tuve que construir mi propio sistema de búsqueda de rutas. Anteriormente había creado un sistema de búsqueda de rutas basado en nodos y A*tile. En ambos casos, especialmente el sistema basado en nodos. un enorme dolor de cabeza. En un sistema de búsqueda de rutas basado en nodos, debes colocar manualmente los puntos utilizados por la IA para navegar entre los dos. Unity no solo realiza funciones de navegación, sino que también utiliza mallas de navegación, que son más eficientes y fluidas que colocar nodos manualmente. Más importante aún, también puede recalcular toda la malla de navegación con un solo clic, eliminando por completo la modificación manual de los nodos de navegación.
Uno de los sistemas fallidos de búsqueda de rutas que hice usando un sistema basado en nodos
Después de agregar objetos estáticos a la malla de navegación, puedes seleccionar una serie de configuraciones y hacer clic en los botones de horneado, como como determinar qué tan pronunciada es la pendiente y qué tan altos deben ser los escalones antes de considerar agregar un muro. De esta manera obtienes una vista que puedes obtener una vista previa. Una cosa a tener en cuenta es que el hecho de que un objeto exista en la escena no significa que sea parte de la red de navegación. Por ejemplo, en este juego, no me importa si los jugadores pisan los escombros, por lo que no marco ningún escombros como navegación estática, lo que acelera la generación de la cuadrícula actual.
En realidad, hay valores numéricos en "Arrival in Hell"
Después de generar la malla de navegación, simplemente agregué un componente NavMeshAgent al modelo del jugador, y este juego ahora puede Después de buscar la ruta, lo único que queda es agregar la entrada del mouse para controlar el destino de NavMeshAgent.
Horneado hecho con NavMesh
Configuración de NavMeshAgent
Para decirle a NavMeshAgent que navegue, hice los siguientes comandos:
1. Escuche atentamente la entrada del mouse
2. Coloque el mouse en el espacio de la pantalla
3. Convierta el espacio de la pantalla en un haz de luz de la cámara
4. Cuando la luz llegue al suelo, retírela cuando sea necesario
5. Establezca el destino de NavMeshAgent en la posición correspondiente en el suelo.
El código C# es así:
Destino y ruta en vista visual
Esto resuelve la mayoría de mis necesidades de navegación para este juego. La única excepción es. cuando la malla de navegación cambia debido a alguna actividad en el juego. Por ejemplo, las puertas de la primera habitación inicialmente están cerradas. Luego, cuando se abre, la cuadrícula de filas debe actualizarse para reflejar este cambio, lo que permite a los jugadores atravesar las puertas recién abiertas. En lugar de volver a crear la malla de navegación estática completa mientras se ejecuta el juego, utilicé el componente NavMeshObstacle, que te permite agregar objetos dinámicos durante el proceso de búsqueda de rutas. Si el objeto se mueve, el algoritmo de búsqueda de rutas de Unity se actualizará según la situación real.
La ruta de navegación cambiará automáticamente según el cambio de NavMeshObstacle
Vista visual
Entonces, así es como se realiza la navegación de búsqueda de rutas del juego, así es " Llegada" El principio de funcionamiento de la navegación en el juego "In Hell" sólo se puede completar con la función de navegación que viene con Unity.