Jak sprawdzić, czy mój wróg widzi mojego gracza?

15

Biorąc pod uwagę gracza i wroga z pozycją oraz wektor kierunków każdego z nich, jak mogę stwierdzić, czy jeden „widzi” drugiego?

Innymi słowy, jak sprawdzić, czy jedna pozycja z kierunkiem znajduje się z przodu, czy za inną pozycją z kierunkiem?

Dla moich celów „przed” oznacza bezpośrednio przed lub 90 stopni w każdą stronę.

izb
źródło
11
Oczywistym rozwiązaniem jest stworzenie kolejnej kamery i ponowne renderowanie sceny z punktu widzenia wroga, a następnie wykonanie rozpoznawania obrazu na wyniku dla postaci gracza.
Riking
nagroda za najbardziej uproszczoną odpowiedź trafia do ...
OganM,
3
Chociaż komentarz Rikinga miał być prawdopodobnie żartem, jest to rzeczywiście słuszny sposób, aby to zrobić - dając NPCom taki sam dostęp do stanu gry, jaki wolałby gracz, niż pozwalając mu na dostęp do wewnętrznego stanu gry.
R .. GitHub ZATRZYMAJ LÓD
5
@R .. Tak, ale gdzie narysujesz linię? Biorąc to rozumowanie do logicznego punktu końcowego, NPC w końcu stają się świadomi zdolności do gry i myślenia jak istota ludzka ... w tym momencie prawdopodobnie racjonalnie postanowiliby zacząć od nowa hackowanie: p
Thomas
@Thomas: W praktyce myślę, że możesz pójść na kompromis, zbliżając się do poziomu informacji, jakie mieliby oni jako gracz, bez kłopotów z implementacją go w ten sposób. Proste środki, takie jak poprawne testowanie linii wzroku, ograniczenie zdolności do identyfikacji obiektu znajdującego się w pewnej odległości itp., Mogą przejść długą drogę.
R .. GitHub ZATRZYMAJ LÓD

Odpowiedzi:

17

Iloczyn iloczynu dwóch wektorów może powiedzieć, czy są naprzeciw siebie, czy nie. Pierwszym wektorem może być prawdopodobnie kierunek patrzenia na przeciwnika, drugim powinien być wektor wskazujący pozycję gracza do pozycji przeciwnika.

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

Shittypeete
źródło
Ach tak, zastanawiałem się nad tym. Żonglowałem 4 wektorami, ale naprawdę chcę wektor od jednego gracza do drugiego. Dzięki wideo było bardzo pomocne.
izb
Jednym z kluczowych szczegółów, który moim zdaniem powinien zostać dodany do tej odpowiedzi, jest to, że gra powinna również zrobić raycast lub coś, aby upewnić się, że w rzeczywistości mogą zobaczyć gracza (nie blokowanego przez ściany itp.)
T. Kiley
1
@ T.Kiley: tak naprawdę zasugerował Riking w komentarzu do pytania. Nie, nie sądzę, że to żart. Jeśli twoja gra jest w 3D, raycasting jest naprawdę dobrym sposobem na zrobienie tego. Ponownie wyrenderuj scenę ze wszystkimi obiektami w czarnej fakturze, z punktu widzenia wroga, z wyjątkiem graczy i innych ważnych obiektów, które powinny być renderowane w innych kolorach. Pamiętaj, aby wyłączyć oświetlenie i zacienienie. Jeśli wynikowy bufor nie jest całkowicie czarny, to wiesz, że ktoś znajduje się w polu widzenia wroga i możesz użyć koloru, aby zidentyfikować, czym są obiekty.
Lie Ryan