Come faccio a sapere se il mio nemico può vedere il mio giocatore?


15

Dato un giocatore e un nemico con posizione e dato il vettore di direzione di ciascuno, come posso sapere se uno può "vedere" l'altro?

In altre parole, come posso verificare se una posizione con direzione è davanti o dietro un'altra posizione con direzione?

Per i miei scopi, "davanti a" significa direttamente davanti o 90 gradi su entrambi i lati.


11
Chiaramente, la soluzione è quella di creare un'altra telecamera e riattivare la scena dal punto di vista del nemico, quindi eseguire il riconoscimento dell'immagine sul risultato per il personaggio del giocatore.
Riking

il premio per la risposta più semplicistico va a ...
OganM,

3
Mentre il commento di Riking era probabilmente inteso come uno scherzo, questo è il modo giusto per farlo - dare agli NPC lo stesso accesso allo stato di gioco che un giocatore avrebbe piuttosto che consentire loro di accedere allo stato interno del gioco.
R .. GitHub smette di aiutare ICE il

5
@R .. Sì, ma dove disegni la linea? Portando questo ragionamento al suo endpoint logico, gli NPC alla fine diventano senzienti con la capacità di giocare e pensare come un essere umano ... a quel punto probabilmente avrebbero deciso razionalmente di ricominciare a wallhack: p
Thomas

@Thomas: In pratica, penso che tu possa fare una sorta di compromesso, approssimando il livello di informazioni che avrebbero come giocatore senza andare a preoccuparsi di implementarlo in quel modo. Semplici misure come il corretto test della linea di vista, la limitazione della capacità di identificare un oggetto oltre una certa distanza, ecc. Potrebbero fare molto.
R .. GitHub smette di aiutare ICE il

Risposte:


17

Il prodotto punto di due vettori può dirti se si affrontano o meno. Il primo vettore può probabilmente essere la direzione della vista dei nemici, mentre il secondo dovrebbe essere un vettore che punta dalla posizione del giocatore alla posizione dei nemici.

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


Ah sì, lo stavo pensando troppo. Stavo destreggiando 4 vettori, ma in realtà voglio il vettore da un giocatore all'altro. Il video è stato molto utile, grazie.
IZB

Un dettaglio cruciale che penso debba essere aggiunto a questa risposta è che il gioco dovrebbe anche fare un raycast o qualcosa del genere per garantire che possano effettivamente vedere il giocatore (non bloccato da muri ecc.)
T. Kiley

1
@ T.Kiley: questo è stato suggerito da Riking nel commento alla domanda. No, non credo sia uno scherzo. Se il tuo gioco è 3D, il raycasting è in realtà un modo equo per farlo. Renderizza la scena con tutti gli oggetti in trama nera, dal punto di vista del nemico, tranne che i giocatori e altri oggetti importanti dovrebbero essere resi in altri colori. Assicurati di disabilitare l'illuminazione e l'ombreggiatura. Se il buffer risultante non è interamente nero, allora sai che qualcuno è nella linea di vista del nemico e puoi usare il colore per identificare quali oggetti sono.
Lie Ryan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.