Jump to content
Unity Insider Forum

Vector3.distance


Gnurfl

Recommended Posts

Hallo :)

Ich habe mein kleines Projekt mal erweitert. Nun gibt es auch einen animierten Gegner. Funktioniert recht gut. Ich rechne die Distanze vom Gegner und dem FPS Contoller aus und lasse auf Grund dieses Werte bestimmte Dinge gesehen. Also er läuft / stoppt/attakiert auf Grund dieses Wertes..

(in der Updatemethode)

// Distance berrechnen und anzeigen
        gegnerPos = new Vector3 (transform.position.x , transform.position.y, transform.position.z);
        koordinatenme = new Vector3 (target.transform.position.x,target.transform.position.y, target.transform.position.z);
        distance = Vector3.Distance(gegnerPos,koordinatenme);
        Debug.Log(distance);

Der Wert wird erstmal korrekt angezeigt. Der Gegner reagiert auch wie gewünscht. Nuuuuur: Der Wert distance stimmt irgendwann nicht mehr. Der Gegner ist viel weiter weg und distance ist auf 0.x etc. Er wird wieder größer wenn ich wegrenne.. Aber er verschiebt sich irgendwie ständig und ich kann kein wirkliches Muster erkennen. Weiß jemand woran das liegen könnte? 

Bewegt wird der Gegner (gegnerpos) uebrigens mit: transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann so keinen Fehler erkennen.
Lass dir am besten mal den Vector in der Szeneview anzeigen, über den die Distanz berechnet wird.

  gegnerPos = new Vector3 (transform.position.x , transform.position.y, transform.position.z);
  koordinatenme = new Vector3 (target.transform.position.x,target.transform.position.y, target.transform.position.z);
  distance = Vector3.Distance(gegnerPos,koordinatenme);
  Debug.Log(distance);

  // Hier überprüfen wir, ob generell die Koordinaten stimmen
  Vector3 distanzVector = gegnerPos - koordinatenme; // Distanzvektor zum Feind
  Debug.DrawLine(koordinatenme, gegnerPos, Color.red); // Distanzvektor zum Feind im Szeneview anzeigen
  Debug.Log("Distanz-Vector: " + distance.magnitude); // Mal eine andere Methode die Distanz auszulesen

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nur so nebenbei:

new Vector3 (transform.position.x , transform.position.y, transform.position.z)

ist gleichbedeutend, aber wesentlich kürzer schreibbar als

transform.position

Du kannst also schreiben:

gegnerPos = transform.position;

oder gleich

distance = Vector3.Distance(transform.position, target.transform.position);

und die beiden Zeilen davor gänzlich weglassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Zer0Cool: Danke für die Tipps. Der Vector zeigt das gleiche an wie meine Berrechnung. Ich kann weiterhin kein Muster erkennen. Ich habe den Abstand nun auf 20 erhöht (ab wann der Gegner stehenbleibt und attakiert) Vorher war es auf 0.x. Wenn der Gegner sich nicht bewegt (also nur ich mich bewege) scheinen die Daten zu stimmen. Für mich sehr unverständlich da die Berrechnung ja ständig neu gemacht wird.

@Sascha: Wow.. Voll die Tipperei erspart. Danke :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...