Retour à l'accueil

Comportements de direction dans Unity : navigation d'agents

L'article décrit l'application des Comportements de direction pour naviguer les agents-poissons dans un labyrinthe sous-marin Unity 3D. Les algorithmes seek, pursuit, evade sont détaillés avec des formules mathématiques. L'approche assure un mouvement fluide, réactif sans planification globale de chemin.

Comportements de direction pour la navigation d'agents dans Unity 3D
Advertisement 728x90

Implémentation des comportements de pilotage pour la navigation des agents dans Unity 3D

Les comportements de pilotage offrent une navigation réactive pour les agents autonomes dans des environnements dynamiques. Dans un projet Unity, des agents—trois types de poissons—se déplacent dans un labyrinthe sous-marin, réagissant au sous-marin du joueur. Chaque type utilise une combinaison de comportements de base : poursuite, évitement, errance et évitement des collisions. Cela permet des trajectoires fluides sans planification de chemin globale.

L'approche repose sur des calculs vectoriels locaux à chaque image. Un agent ajuste sa vitesse et son orientation vers une direction souhaitée, en tenant compte des cibles, des menaces et des obstacles. La combinaison de règles simples génère un mouvement complexe et naturel.

Types fondamentaux de comportements de pilotage

Les comportements de pilotage sont divisés en types fondamentaux, implémentés via des mathématiques vectorielles :

Google AdInline article slot
  • Poursuite : calcul d'un vecteur de la position de l'agent vers la cible, normalisation et application comme direction de vitesse souhaitée.
  • Prédiction de poursuite : prédiction de la position de la cible basée sur sa vitesse et sa direction, puis poursuite du point prédit.
  • Évitement : poursuite dans la direction opposée à la position prédite de la menace.
  • Errance : une direction de base avec des déviations aléatoires appliquées dans un rayon de disque sur une sphère devant l'agent.
  • Évitement des collisions : balayage de rayons vers l'avant, déviation de l'obstacle le plus proche.

Ces comportements sont additionnés avec des poids pour produire la force de pilotage finale, limitée par une force maximale.

Dans l'environnement sous-marin, l'évitement des collisions est crucial en raison des murs du labyrinthe. L'errance ajoute de la variabilité pour les poissons comestibles en dehors de la zone du sous-marin.

Modèles de comportement pour les agents poissons

Les poissons sont divisés en types comestibles, dangereux et vénéneux. Chaque type correspond à un algorithme basé sur les comportements de pilotage :

Google AdInline article slot
  • Suivi (pour tous les types initialement) : poursuite vers le sous-marin avec un léger bruit aléatoire pour éviter la linéarité.
  • Poursuite (dangereux/vénéneux) : poursuite avec lissage de direction fluide.
  • Évitement (comestible) : transition de la poursuite à l'évitement + décalage latéral lors de l'entrée dans la zone d'interaction.

La fluidité est assurée par l'interpolation des directions actuelles et souhaitées avec un coefficient α ∈ [0,1]. La vitesse est limitée par v_max, et la durée de vie t_life ≤ T_max est prise en compte.

Implémentation mathématique des algorithmes

Notations :

  • x_s — position du sous-marin
  • x_f — position du poisson
  • v_f — vitesse du poisson
  • Δt — pas de temps
  • R — rayon de la zone
  • v_max — vitesse maximale
  • u — vecteur vers le haut
  • t_life — durée de vie
  • T_max — durée de vie maximale

Distance : d = ||x_s - x_f||

Google AdInline article slot

Vecteur unitaire vers la cible : e_t = (x_s - x_f) / ||x_s - x_f||

Suivi

d = ||x_s - x_f|| > R

e_follow = e_t

Avec bruit : e_follow = normalize(e_follow + k_r r), où r est un vecteur aléatoire ||r|| < ε

Poursuite

e_p = e_t

Lissé : e_new = normalize((1-α) e_cur + α e_p)

v_f = v_max * e_new

Évitement

Si d > R : e = e_follow*

Sinon : e_evade = -e_t + décalage_latéral (perpendiculaire à u × e_t)

v_f = v_max * normalize(e_evade)

Mise à jour de la position : x_f += v_f * Δt

Ces formules sont intégrées dans la méthode Update() de l'agent dans Unity. L'évitement des collisions est ajouté comme une force de pilotage prioritaire lors de la détection de collisions par raycast.

Intégration dans Unity et optimisation

Dans Unity, l'implémentation utilise Transform pour la position/rotation, Rigidbody pour la physique (optionnel). La force de pilotage est appliquée via AddForce ou en définissant directement la vitesse.

Aspects clés de performance :

  • Calculs locaux sans navmesh.
  • Limitation des raycasts pour l'évitement (3-5 rayons dans un cône).
  • Pooling des poissons pour l'apparition/disparition.

Le comportement s'adapte au labyrinthe 3D : les mouvements verticaux tiennent compte du vecteur u, les obstacles—murs de Collider.

Pour les développeurs seniors : étendez le modèle avec l'arrivée (ralentissement près de la cible), la séparation (distance entre agents), la cohésion/formation pour les groupes de poissons.

Points clés à retenir

  • Localité : Les comportements de pilotage évitent une planification coûteuse de type A*, adaptée à 50+ agents.
  • Combinabilité : l'addition de forces avec des poids permet de superposer les comportements (errance + poursuite + évitement).
  • Réactivité : adaptation instantanée au mouvement du sous-marin sans replanification.
  • Fluidité : l'interpolation empêche les saccades, réaliste pour un environnement sous-marin.
  • Extensibilité : facile à ajouter des comportements de suivi de leader ou de groupe.

— Editorial Team

Advertisement 728x90

Lire ensuite