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:
- 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:
- 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||
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
Noch keine Kommentare.