Jump to content
Unity Insider Forum

Abfrage des Winkels des Gegners relativ zur Forward Position des Spielers


turritom

Recommended Posts

winkel.png

 

es geht mir darum anhand der postions vectoren beider objekte, zu testen wenn der Gegner mich trifft, ob er noch in dem winkel steht wo das schild den schlag abblockt ..einfach aus dem Grund weil die Kolisionsabfrage manchmal fehlerhaft ist.

 

sozusagen blockt das schild alle schläge ab die bis 45 grad jeweils vom forward vector kommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Den Vektor von A nach B kriegst du durch B.position - A.position:

var dir = gegner.position - hero.position;

 

Den Forward-Vektor hast du vermutlich schon.

Einfach den Winkel zwischen beiden ausrechnen lassen:

Vector3.Angle(hero.forward, dir)

 

Wenn der Winkel nur von oben gesehen sein, also die vertikale Achse ignoriert werden soll, kannst du vor der Winkelfunktion die y-Werte auf 0 setzen. Dafür müsstest du eine Kopie von hero.forward erstellen, an der du rumpfuschen kannst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meiner Meinung nach reicht Vector3.Angle nicht aus, denn da bekommst du z.B. 45° raus wenn er schräg rechts steht und auch 45° raus, wenn er schräg links steht. Es gibt da also kein im Uhrzeigersinn und gegen den Uhrzeigersinn.

 

Um aber zu wissen, ob er nun links oder recht von einem steht, kann man Vector3.Cross nutzen.

 

Vector3 dir= gegner.position - transform.position;
Vector3 forward = transform.forward;
float angle=Vector3.Angle(dir, forward)
if(Vector3.Cross(forward,dir).y<0){
  //er ist links
  left=true;
}else{
  //er ist rechts
  left=false;
}
// wenn er links ist und der angle im gewünschten Bereich, dann trifft er das Schild

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...