Buscando una buena técnica para el movimiento del personaje en el juego de hack & slash

51

Estoy haciendo juegos de hack & slash y quiero que mis personajes se muevan como, por ejemplo, en Torchlight, Diablo, etc. Actualmente genero un conjunto de nodos para todas las áreas transitables de un piso. Cuando hago clic en algún lugar, el jugador pasa a través de la ruta interpolada de nodos. Esto no se ve muy natural. El jugador se mueve como un robot. Los enemigos también usan este sistema de nodos para moverse y comparten el mismo problema, pero tengo un problema más con ellos. Cuando los enemigos detectan al jugador, van hacia él por el camino más corto. A veces usan el mismo camino y se alinean con el jugador en lugar de rodearlo. No sé cómo hacer que los enemigos elijan diferentes caminos y rodeen al jugador. ¿Sabes cómo puedo resolver estos problemas? ¿Tal vez debería usar un enfoque diferente para el movimiento del personaje?


Mi tecnica actual:

ingrese la descripción de la imagen aquí


Captura de pantalla de la antorcha:ingrese la descripción de la imagen aquí

---ACTUALIZAR---

Quiero saber cómo lidiar con estas situaciones:

Situación 1, tengo obstáculos dinámicos / estáticos en mi camino

ingrese la descripción de la imagen aquí

Situación 2, los enemigos tienen el camino sam al jugador (ponte en la cola para pelear con nosotros) ingrese la descripción de la imagen aquí

piotrek
fuente
10
+1 para diagramas y capturas de pantalla (y una buena pregunta). Siempre útil
El pato comunista
Esta es una pregunta increíble (+1) para la que espero que haya mucha discusión y sugerencia sobre diferentes formas de enfrentar este desafío (influencias aleatorias para alterar rutas, IA, etc.).
Randolf Richardson
1
Me parece una buena práctica usar un sistema de puntuación cuando estás creando una IA. Dependiendo de la puntuación de cada enemigo (tiempo para llegar al jugador, por ejemplo), puedes darles un comportamiento específico. Por ejemplo, si 8 mobs son el máximo que puede atacar al jugador, los que tienen un puntaje más alto que los primeros ocho pueden intentar a sabiendas encontrar un camino más largo para el jugador, haciéndolos parecer más inteligentes.
Jonathan Connell
Todavía estoy buscando respuesta, ¿cómo puedo lidiar con obstáculos (dinámicos / estáticos) en la malla de navegación? , No puedo usar Recast
piotrek

Respuestas:

24

Comportamientos de dirección en combinación con una estructura de datos de navegación .

Hay varias maneras de hacer esto, pero ese es el concepto básico. Puede ser más fácil usar una malla de navegación para que pueda aplicar el trazado de ruta dentro de cada sección convexa.

Si no está convencido de mantener un gráfico, puede usar un comportamiento de Búsqueda para cada nodo en la ruta, en lugar de seguir rígidamente una ruta de nodo a nodo.

Otro método que podría emplear es el suavizado de ruta, pero tenga en cuenta que esto es bastante costoso desde el punto de vista computacional.

Espero que ayude.

EDITAR:

Para ayudarlo con sus problemas para evitar obstáculos, use algún tipo de Evitación de obstáculos .

Ray Dey
fuente
Gracias por la respuesta, ¿sabes cómo puedo generar la malla de navegación? ¿O hay otra forma de hacerlo? Mi mapa, está creado con piezas de piso sin costuras (quads / triángulos).
piotrek 01 de
1
Siempre puede usar Recast ( code.google.com/p/recastnavigation ) para generar una malla de navegación. Solo necesita darle una "sopa de triángulos" (un montón de polígonos) y la generará para usted.
Ray Dey
¿Soy el único que se encuentra con esto, pero el enlace: ai-blog.net/archives/000152.html está muerto? En realidad no puedo acceder a www.ai-blog.net
123iamking
3

Si prefiere seguir con un diagrama de nodo en lugar de cambiar a una malla de navegación como otros han sugerido, entonces puede resolver el problema de "alinearse con el jugador en lugar de rodearlo" asignando a cada enemigo para que ataque desde una dirección particular.

Hay muchas formas de lograr esto, pero generalmente uso un sistema de 'fichas' para asignar direcciones únicas a los monstruos, donde el objeto jugador posee una ficha para cada dirección (norte, noreste, este, etc.). Cuando un enemigo quiere llegar al jugador, primero debe adquirir una ficha de él. La dirección especificada por la ficha le dice al monstruo a qué lado del jugador se le permite encontrar el camino. Dado que el jugador solo tiene una ficha para cada dirección, y los monstruos necesitan una ficha antes de que puedan atacar, varios monstruos no tratarán de llegar al mismo lado del jugador, lo que debería romper sus caminos un poco.

Además, es posible que también desee aplicar una pequeña penalización a los nodos durante el proceso de búsqueda de caminos, para alentar a los monstruos a acercarse desde una dirección que coincida con la ficha que tienen. (Es decir, si un monstruo tiene la ficha que le permite atacar desde el este, entonces con el propósito de determinar el "camino más corto" para ese monstruo, trate los nodos de la ruta que están al norte / oeste / sur del jugador como si son varios nodos, en lugar de solo uno). Esto hará que los monstruos se separen más rápido e intente flanquear al jugador, en lugar de marchar hacia el jugador en una sola fila y solo expandirse en el último paso.

Trevor Powell
fuente
2

Básicamente para los enemigos, lo que quieres hacer es encontrar caminos en un nivel macro (piensa en generar áreas convexas y rutas en el área en la que se encuentra el jugador), y haz algunos comportamientos de dirección de estilo boid en el nivel micro (una vez que estés cerca al jugador).

Aquí hay un ejemplo de comportamiento de boid: http://www.red3d.com/cwr/boids/

Para el jugador, creo que la luz de las antorchas hace la búsqueda de caminos en una malla de navegación para hacer clic / arrastrar, y eso funciona bastante bien. Puede sentirse un poco más desconectado que el control directo, pero conduce a mejores resultados para el jugador.

Tétrada
fuente
Pero, ¿qué pasa con las escaleras, por ejemplo? ¿El enemigo también puede atacarme allí, convertirlo en otra malla de navegación?
piotrek
Debería ser parte de la malla de navegación, siendo su propia forma convexa.
Tetrad
1
Alternativamente, podría continuar utilizando su ruta punto a punto y recurrir a comportamientos de dirección basados ​​en la física cuando se "acerque".
Tetrad
¿Cómo puedo lidiar con obstáculos dinámicos en las mallas de navegación?
piotrek 01 de
1
Aquí hay una publicación de blog sobre cómo está trabajando Recast en su manejo: digestingduck.blogspot.com/2011/03/… .
Tetrad
1

hay un algoritmo llamado rrt que se usa para problemas de búsqueda de caminos del mundo real. la superficie sobre la que puede caminar su héroe (o enemigos) es una entrada junto con la superficie que los objetos pueden mover, y al usar un algoritmo de optimización, encuentra un camino hacia su destino. Por lo que sé, este algoritmo se usa mucho en las ligas de robocup. es rápido, encuentra el camino más corto y evita colisiones y giros bruscos. puedes usar este programa de powerpoint para comprender cómo genera el camino.

Ali1S232
fuente
después de mirar más, parece que la presentación que proporcioné solo dice lo que hace rrt y también sugiere un nuevo enfoque, que dice que funciona mejor en algunos casos, y sugirió que el algoritmo para encontrar caminos en juegos RTS espera que te ayude.
Ali1S232
0

Para hacer que las rutas de búsqueda de caminos se vean más "realistas", le sugiero que consulte el artículo sobre A * de aspecto natural en Game Programming Gems Vol.1

Freud
fuente