Powrót do strony głównej

Steering Behaviors w Unity: nawigacja agentów

Artykuł opisuje zastosowanie Steering Behaviors do nawigacji ryb-agentów w podwodnym 3D-labiryncie Unity. Szczegółowo opisano algorytmy seek, pursuit, evade z formułami matematycznymi. Podejście zapewnia płynny, reaktywny ruch bez globalnego planowania ścieżek.

Nawigacja agentów Steering Behaviors w Unity 3D
Advertisement 728x90

Implementacja Steering Behaviors do nawigacji agentów w Unity 3D

Steering Behaviors zapewniają reaktywną nawigację autonomicznych agentów w dynamicznych środowiskach. W projekcie Unity agenci — ryby trzech typów — poruszają się w podwodnym labiryncie, reagując na łódź podwodną gracza. Każdy typ wykorzystuje kombinację podstawowych zachowań: seek, pursuit, evade, wander i collision avoidance. Pozwala to tworzyć płynne trajektorie bez globalnego pathfinding.

Podejście opiera się na lokalnych obliczeniach wektorowych w każdej klatce. Agent koryguje prędkość i orientację w kierunku pożądanym, uwzględniając cele, zagrożenia i przeszkody. Kombinacja prostych reguł generuje złożony, naturalny ruch.

Podstawowe typy Steering Behaviors

Steering Behaviors dzielą się na fundamentalne typy, implementowane poprzez matematykę wektorową:

Google AdInline article slot
  • Seek: obliczanie wektora od pozycji agenta do celu, normalizacja i zastosowanie jako pożądanego kierunku prędkości.
  • Pursuit: prognozowanie pozycji celu na podstawie prędkości i kierunku, seek do przewidywanej pozycji.
  • Evade: pursuit w przeciwnym kierunku od przewidywanej pozycji zagrożenia.
  • Wander: podstawowy kierunek z nałożeniem losowych odchyleń w obrębie dysku o promieniu na sferze przed agentem.
  • Collision avoidance: skanowanie promieni do przodu, odchylenie od najbliższej przeszkody.

Te zachowania sumują się z wagami do końcowej siły steering, ograniczonej maksymalną siłą.

W środowisku podwodnym collision avoidance jest kluczowe ze względu na ściany labiryntu. Wander dodaje zmienność dla jadalnych ryb poza strefą łodzi podwodnej.

Modele zachowań agentów-ryb

Ryby dzielą się na jadalne, niebezpieczne i trujące. Każdemu typowi odpowiada algorytm oparty na Steering Behaviors:

Google AdInline article slot
  • Podążanie (dla wszystkich typów na początkowym etapie): seek do łodzi podwodnej z małym losowym szumem, aby uniknąć liniowości.
  • Pogoń (niebezpieczne/trujące): pursuit z płynnym wygładzaniem kierunku.
  • Unikanie (jadalne): przejście od seek do evade + bocznego offsetu przy wejściu w strefę interakcji.

Płynność zapewnia interpolacja bieżącego i pożądanego kierunku ze współczynnikiem α ∈ [0,1]. Prędkość ograniczona jest przez v_max, uwzględniany jest czas życia t_life ≤ T_max.

Matematyczna implementacja algorytmów

Oznaczenia:

  • x_s — pozycja łodzi podwodnej
  • x_f — pozycja ryby
  • v_f — prędkość ryby
  • Δt — krok czasowy
  • R — promień strefy
  • v_max — maks. prędkość
  • u — wektor góry
  • t_life — czas życia
  • T_max — maks. czas życia

Odległość: d = ||x_s - x_f||

Google AdInline article slot

Wektor jednostkowy do celu: e_t = (x_s - x_f) / ||x_s - x_f||

Podążanie

d = ||x_s - x_f|| > R

e_follow = e_t

Z szumem: e_follow = normalize(e_follow + k_r r), gdzie r — losowy wektor ||r|| < ε

Pogoń

e_p = e_t

Wygładzone: e_new = normalize((1-α) e_cur + α e_p)

v_f = v_max * e_new

Unikanie

Jeśli d > R: e = e_follow*

W przeciwnym razie: e_evade = -e_t + lateral_offset (prostopadły u × e_t)

v_f = v_max * normalize(e_evade)

Aktualizacja pozycji: x_f += v_f * Δt

Te formuły integrują się w Update() agenta w Unity. Collision avoidance dodawane jest jako priorytetowa siła steering przy wykryciu trafień raycast.

Integracja w Unity i optymalizacja

W Unity implementacja wykorzystuje Transform do pozycji/rotacji, Rigidbody do fizyki (opcjonalnie). Siła steering stosowana jest przez AddForce lub bezpośrednie ustawienie velocity.

Kluczowe aspekty wydajności:

  • Lokalne obliczenia bez navmesh.
  • Ograniczenie raycasts dla avoidance (3-5 promieni w stożku).
  • Pooling ryb do spawnu/despawnu.

Zachowanie adaptuje się do labiryntu 3D: ruchy pionowe uwzględniają wektor u, przeszkody — ściany z Collider.

Dla senior-developerów: rozszerz model o arrival (zwalnianie przy celu), separation (odległość między agentami), cohesion/flocking dla grup ryb.

Co jest ważne

  • Lokalność: Steering Behaviors unikają kosztownego planowania typu A*, nadają się dla 50+ agentów.
  • Łączalność: sumowanie sił z wagami pozwala na layering zachowań (wander + seek + avoid).
  • Reaktywność: natychmiastowa adaptacja do ruchu łodzi podwodnej bez replanning.
  • Płynność: interpolacja zapobiega jitter, realistycznie dla środowiska podwodnego.
  • Rozszerzalność: łatwo dodać leader-following lub group behaviors.

— Editorial Team

Advertisement 728x90

Czytaj dalej