Wie kann ich feststellen, ob mein Feind meinen Spieler sehen kann?

15

Wie kann ich bei einem Spieler und einem Gegner mit einer bestimmten Position und einem bestimmten Richtungsvektor feststellen, ob einer den anderen "sehen" kann?

Mit anderen Worten, wie teste ich, ob eine Position mit Richtung vor oder hinter einer anderen Position mit Richtung liegt?

Für meine Zwecke bedeutet "vor" direkt vor oder um 90 Grad nach beiden Seiten.

izb
quelle
11
Es ist klar, dass die Lösung darin besteht, eine weitere Kamera zu erstellen und die Szene aus der Sicht des Feindes neu zu rendern und dann eine Bilderkennung für das Ergebnis des Spielercharakters durchzuführen.
Riking
Die
einfachste
3
Während Riking Kommentar wahrscheinlich als Scherz gedacht war, ist dies die eigentliche Messe Art und Weise , es zu tun - NPCs den gleichen Zugang zu dem Spielzustand zu geben , dass ein Spieler nicht auf sich zuzugreifen , den internen Zustand des Spiels haben würde , als möglich ist .
R .. GitHub STOP HELPING ICE
5
@R .. Ja, aber wo ziehst du die Linie? NPCs, die diese Überlegungen zu ihrem logischen Endpunkt führen, werden schließlich mit der Fähigkeit, wie ein menschliches Wesen zu spielen und zu denken, empfindungsfähig. An diesem Punkt würden sie sich wahrscheinlich rational entschließen, trotzdem wieder mit dem Wallhacking zu beginnen: p
Thomas
@Thomas: In der Praxis denke ich, dass Sie einen Kompromiss eingehen können, der in etwa dem Informationsstand entspricht, den ein Spieler haben würde, ohne sich die Mühe zu machen, ihn auf diese Weise umzusetzen. Einfache Maßnahmen wie die korrekte Prüfung der Sichtlinie, die Einschränkung der Fähigkeit, ein Objekt über eine bestimmte Entfernung hinaus zu identifizieren usw. könnten einen langen Weg zurücklegen.
R .. GitHub STOP HELPING ICE

Antworten:

17

Das Skalarprodukt zweier Vektoren kann Ihnen sagen, ob sie sich gegenüberstehen oder nicht. Der erste Vektor kann wahrscheinlich die Blickrichtung des Gegners sein, der zweite sollte ein Vektor sein, der von der Position des Spielers zur Position des Gegners zeigt.

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

Shittypeete
quelle
Ah ja, ich habe darüber nachgedacht. Ich habe 4 Vektoren jongliert, aber ich möchte wirklich den Vektor von einem Spieler zum anderen. Das Video war sehr hilfreich, danke.
izb
Ein entscheidendes Detail, das meiner Meinung nach zu dieser Antwort hinzugefügt werden sollte, ist, dass das Spiel auch einen Raycast oder etwas anderes machen sollte, um sicherzustellen, dass sie den Spieler tatsächlich sehen können (nicht durch Wände usw. blockiert)
T. Kiley
1
@ T.Kiley: das hat eigentlich Riking im Kommentar zur Frage angedeutet. Nein, ich denke nicht, dass das ein Witz ist. Wenn es sich bei Ihrem Spiel um 3D handelt, ist Raycasting eine faire Methode. Rendern Sie die Szene einfach mit allen Objekten in schwarzer Textur aus Sicht des Feindes neu, mit Ausnahme der Spieler und anderer wichtiger Objekte, die in anderen Farben gerendert werden sollen. Stellen Sie sicher, dass Beleuchtung und Beschattung deaktiviert sind. Wenn der resultierende Puffer nicht vollständig schwarz ist, wissen Sie, dass sich jemand in der Sichtlinie des Feindes befindet, und Sie können anhand der Farbe identifizieren, um welche Objekte es sich handelt.
Lie Ryan