Zurück zur Startseite

Steering Behaviors in Unity: Agentennavigation

Der Artikel beschreibt die Anwendung von Steering Behaviors zur Navigation von Fisch-Agenten in einem Unterwasser Unity 3D-Labyrinth. Algorithmen seek, pursuit, evade werden mit mathematischen Formeln detailliert. Der Ansatz gewährleistet flüssige, reaktive Bewegung ohne globale Pfadplanung.

Agenten-Navigation Steering Behaviors in Unity 3D
Advertisement 728x90

Implementierung von Lenkverhalten für Agentennavigation in Unity 3D

Lenkverhalten ermöglichen reaktive Navigation für autonome Agenten in dynamischen Umgebungen. In einem Unity-Projekt bewegen sich Agenten – drei Fischarten – durch ein Unterwasserlabyrinth und reagieren auf das U-Boot des Spielers. Jede Art nutzt eine Kombination grundlegender Verhaltensweisen: Ansteuern, Verfolgen, Ausweichen, Umherstreifen und Kollisionsvermeidung. Dies ermöglicht glatte Trajektorien ohne globale Pfadfindung.

Der Ansatz basiert auf lokalen Vektorberechnungen pro Frame. Ein Agent passt seine Geschwindigkeit und Ausrichtung an eine gewünschte Richtung an, unter Berücksichtigung von Zielen, Bedrohungen und Hindernissen. Die Kombination einfacher Regeln erzeugt komplexe, natürliche Bewegungen.

Grundlegende Arten von Lenkverhalten

Lenkverhalten werden in grundlegende Typen unterteilt, die über Vektormathematik implementiert werden:

Google AdInline article slot
  • Ansteuern: Berechnung eines Vektors von der Position des Agenten zum Ziel, Normalisierung und Anwendung als gewünschte Geschwindigkeitsrichtung.
  • Verfolgen: Vorhersage der Zielposition basierend auf Geschwindigkeit und Richtung, dann Ansteuern des vorhergesagten Punkts.
  • Ausweichen: Verfolgen in entgegengesetzter Richtung von der vorhergesagten Bedrohungsposition.
  • Umherstreifen: Eine Grundrichtung mit zufälligen Abweichungen innerhalb eines Scheibenradius auf einer Kugel vor dem Agenten.
  • Kollisionsvermeidung: Abtasten von Strahlen nach vorne, Lenkung weg vom nächsten Hindernis.

Diese Verhaltensweisen werden mit Gewichtungen summiert, um die endgültige Lenkkraft zu erzeugen, begrenzt durch eine maximale Kraft.

In der Unterwasserumgebung ist Kollisionsvermeidung aufgrund der Labyrinthwände entscheidend. Umherstreifen fügt Variabilität für essbare Fische außerhalb der U-Boot-Zone hinzu.

Verhaltensmodelle für Fischagenten

Fische werden in essbare, gefährliche und giftige Typen unterteilt. Jeder Typ entspricht einem Algorithmus basierend auf Lenkverhalten:

Google AdInline article slot
  • Folgen (für alle Typen anfangs): Ansteuern des U-Boots mit leichtem Zufallsrauschen, um Linearität zu vermeiden.
  • Verfolgen (gefährlich/giftig): Verfolgen mit sanfter Richtungsglättung.
  • Vermeidung (essbar): Übergang von Ansteuern zu Ausweichen + seitlicher Versatz beim Betreten der Interaktionszone.

Sanftheit wird durch Interpolation aktueller und gewünschter Richtungen mit einem Koeffizienten α ∈ [0,1] gewährleistet. Die Geschwindigkeit ist durch v_max begrenzt, und die Lebensdauer t_life ≤ T_max wird berücksichtigt.

Mathematische Implementierung der Algorithmen

Notationen:

  • x_s — U-Boot-Position
  • x_f — Fischposition
  • v_f — Fischgeschwindigkeit
  • Δt — Zeitschritt
  • R — Zonenradius
  • v_max — maximale Geschwindigkeit
  • u — Aufwärtsvektor
  • t_life — Lebensdauer
  • T_max — maximale Lebensdauer

Abstand: d = ||x_s - x_f||

Google AdInline article slot

Einheitsvektor zum Ziel: e_t = (x_s - x_f) / ||x_s - x_f||

Folgen

d = ||x_s - x_f|| > R

e_follow = e_t

Mit Rauschen: e_follow = normalize(e_follow + k_r r), wobei r ein Zufallsvektor mit ||r|| < ε ist

Verfolgen

e_p = e_t

Geglättet: e_new = normalize((1-α) e_cur + α e_p)

v_f = v_max * e_new

Vermeidung

Wenn d > R: e = e_follow*

Sonst: e_evade = -e_t + lateral_offset (senkrecht zu u × e_t)

v_f = v_max * normalize(e_evade)

Positionsaktualisierung: x_f += v_f * Δt

Diese Formeln sind in die Update()-Methode des Agenten in Unity integriert. Kollisionsvermeidung wird als priorisierte Lenkkraft hinzugefügt, wenn Raycast-Treffer erkannt werden.

Integration in Unity und Optimierung

In Unity nutzt die Implementierung Transform für Position/Rotation, Rigidbody für Physik (optional). Die Lenkkraft wird über AddForce oder durch direktes Setzen der Geschwindigkeit angewendet.

Wichtige Leistungsaspekte:

  • Lokale Berechnungen ohne Navmesh.
  • Begrenzung von Raycasts für Vermeidung (3–5 Strahlen in einem Kegel).
  • Pooling von Fischen für Erzeugung/Entfernung.

Das Verhalten passt sich dem 3D-Labyrinth an: Vertikale Bewegungen berücksichtigen den u-Vektor, Hindernisse – Wände von Collider.

Für erfahrene Entwickler: Erweitern Sie das Modell mit Ankunft (Verlangsamung nahe dem Ziel), Trennung (Abstand zwischen Agenten), Kohäsion/Schwarmverhalten für Fischgruppen.

Wichtige Erkenntnisse

  • Lokalität: Lenkverhalten vermeiden teure A*-ähnliche Planung, geeignet für 50+ Agenten.
  • Kombinierbarkeit: Summierung von Kräften mit Gewichtungen ermöglicht Schichtung von Verhalten (Umherstreifen + Ansteuern + Vermeiden).
  • Reaktivität: Sofortige Anpassung an U-Boot-Bewegungen ohne Neuplanung.
  • Sanftheit: Interpolation verhindert Ruckeln, realistisch für Unterwasser.
  • Erweiterbarkeit: Einfach hinzuzufügen: Führer-Folgen oder Gruppenverhalten.

— Editorial Team

Advertisement 728x90

Weiterlesen