¿Cómo puedo saber si mi enemigo puede ver a mi jugador?

15

Dado un jugador y un enemigo con posición, y dado el vector de dirección de cada uno, ¿cómo puedo saber si uno puede "ver" al otro?

En otras palabras, ¿cómo pruebo si una posición con dirección está al frente o detrás de otra posición con dirección?

Para mis propósitos, 'delante de' significa directamente delante de, o 90 grados a cada lado.

izb
fuente
11
Claramente, la solución es crear otra cámara y volver a renderizar la escena desde el punto de vista del enemigo, luego realizar un reconocimiento de imagen en el resultado para el personaje del jugador.
Riking
el premio de respuesta más simplista va a ...
OganM
3
Si bien el comentario de Riking probablemente fue una broma, esta es la forma justa de hacerlo: dar a los NPC el mismo acceso al estado del juego que tendría un jugador en lugar de permitirles acceder al estado interno del juego.
R .. GitHub DEJA DE AYUDAR A ICE
55
@R .. Sí, pero ¿dónde trazas la línea? Llevando este razonamiento a su punto final lógico, los NPC eventualmente se vuelven conscientes con la capacidad de jugar y pensar como un ser humano ... en ese punto probablemente decidirían racionalmente comenzar de nuevo el bloqueo de paredes de todos modos: p
Thomas
@Thomas: En la práctica, creo que puedes hacer algún tipo de compromiso, aproximando el nivel de información que tendrían como jugador sin tener que molestarse en implementarlo de esa manera. Las medidas simples, como las pruebas correctas de la línea de visión, que limitan la capacidad de identificar un objeto más allá de una cierta distancia, etc., podrían ser muy útiles.
R .. GitHub DEJA DE AYUDAR AL HIELO

Respuestas:

17

El producto punto de dos vectores puede decirle si se enfrentan entre sí o no. El primer vector probablemente puede ser la dirección de vista de los enemigos, el segundo debe ser un vector que apunte desde la posición del jugador a la posición del enemigo.

https://www.youtube.com/watch?v=Q9FZllr6-wY

Shittypeete
fuente
Ah sí, lo estaba pensando demasiado. Estaba haciendo malabares con 4 vectores, pero realmente quiero el vector de un jugador a otro. El video fue muy útil, gracias.
izb
Un detalle crucial que creo que debería agregarse a esta respuesta es que el juego también debe hacer una emisión de rayos o algo para asegurarse de que de hecho puedan ver al jugador (no bloqueado por paredes, etc.)
T. Kiley
1
@ T.Kiley: eso fue sugerido por Riking en el comentario a la pregunta. No, no creo que sea una broma. Si su juego es en 3D, la emisión de rayos es realmente una forma justa de hacerlo. Simplemente vuelve a representar la escena con todos los objetos en textura negra, desde el punto de vista del enemigo, excepto que los jugadores y otros objetos importantes deben renderizarse en otros colores. Asegúrese de deshabilitar la iluminación y la sombra. Si el búfer resultante no es completamente negro, entonces sabes que alguien está en la línea de visión del enemigo y puedes usar el color para identificar qué objetos son.
Lie Ryan