Les AI

Les gardes portant des torches
Patrouilles et Navmesh
Comment montrer si un AI est inconscient ou mort
Personnalisation d'AI – Exemple d'un Elément de feu (Fire Elemental)

Navmesh et patrouilles

(Krypt -- tr : Stefan Key)

Le Navmesh est un ensemble de points créés sur tous les sols d'une map que l'AI peut fouler. Vous pouvez faire le Navmesh en faisant un Build All dans votre map et il y a également un bouton dans la barre d'outils supérieure qui ressemble à deux points reliés par des lignes, il ne construit que le Navmesh.
Avant d'utiliser ce bouton, il faut avoir son BSP construit, sinon cela ne fonctionnera pas.

Une fois votre Navmesh construit, vous devriez le voir en cliquant sur le bouton au-dessus de la fenêtre 3D où il est écrit "NavMesh Nodes" quand on passe la souris juste au dessus. Vous devriez à présent voir des triangles rouges avec des petits Y au milieu tout le long de vos sols. La construction automatique est utile pour des zones avec une architecture simple ; mais quand on a une map bien détaillée, vous devrez faire pas mal de paramétrages pour purger le Navmesh pour faciliter le passage de vos AI. Dans la plupart des cas, vous devrez construire les différents navmesh manuellement. Il est mieux aussi d'avoir un Navmesh unique et clair, la construction en est plus rapide allant d'environ 5 minutes à moins d'une minute pour un grand niveau.

Un petit rappel sur les Navmesh et comment ils fonctionnent…

Quand un AI marche dans un niveau, tout ce qu'il l'intéresse est le Navmesh. Il ignore totalement l'architecture du niveau. S'il y a un Navmesh sous un mur solide, l'AI essaiera de traverser le mur continuellement croyant qu'il lui est possible de marcher à cet endroit. Il ne faut pas non plus placer les Navmesh sous les objets avec lesquelles les AI peuvent entrer en collision physiquement (à l'exception des objets physiques déplaçables). Il ne faut pas placer les Navmesh "en l'air" où l'AI ne peut poser le pied.
Autre chose importante : les Navmesh doivent être connectés pour que l'AI puisse les traverser. S'il y a 1 unité séparant 2 points Navmesh, cela équivaut au Grand Canyon car l'AI sera incapable de traverser ce "gouffre".

Le volume de soustraction Navmesh (Navmesh Substraction Volume) est votre meilleur atout pour la simplification des Navmesh.

Vous pouvez créer un volume de soustraction Navmesh avec le Builder Brush en cliquant sur le bouton sur la barre d'outils gauche qui ressemble à un cube bleu translucide, il indique en info-bulle "Volume".
Un menu apparaît avec une liste de tous les volumes que vous voulez créer. Sélectionnez NavmeshSubtractionVolume et votre volume sera créé.
Son nom est assez explicite : il soustrait quelque chose du Navmesh. Si vous mettez un volume de soustraction Navmesh de forme cubique au milieu d'un sol et que vous reconstruisez le Navmesh, vous verrez qu'il n'y a plus de Navmesh à l'endroit où est placé le volume.

On peut aussi ajouter au Navmesh, cela peut être utile dans certains cas. Il y a des propriétés pour le volume pour lui indiquer s'il faut ajouter / soustraire au Navmesh.

Ouvrez les propriétés du volume, faites un clic droit sur Properties > Add property et déroulez la liste des catégories pour choisir Navmesh. Là vous avez "AddSurfacesToNavmesh" et "CanSubdivideNavmesh". Ils sont de type booléen (2 possibilités) ce qui vous permet de régler l'ajout ou la soustraction du Navmesh. Si vous prenez le volume de l'exemple précédent et que vous ajoutez la propriété "AddSurfacesToNavmesh", vous la paramétrez sur True et que vous faites un Rebuild, vous verrez le Navmesh apparaître à son sommet "en l'air". Comme je l'ai indiqué précédemment, ne faites pas cela dans une vraie map car l'AI essaiera de rejoindre ce Navmesh alors qu'il n'y a rien pour le faire tenir (il est "en l'air").

Un autre moyen important pour purger votre Navmesh : on peut désactiver le Navmesh sur les BSP ou les Static Mesh.

Il est très simple de le faire sur un BSP, sélectionnez une surface BSP, faites un clic droit, et regardez les propriétés de la surface (Surface Properties). Dans Flags, vous avez l'option "Do not add surfaces to Navmesh" qui vous permet de désactiver le Navmesh pour cette surface. Faites ceci pour les endroits tels que les toits, les sommets des murs et aussi toutes les surfaces où vous ne voulez pas que les AI aillent.

Pour les Static Mesh, ajoutez les mêmes propriétés que j'ai indiqué pour les volumes de soustraction des Navmesh (Ajouter (Add) / Soustraire (Substract) du Navmesh). Je crois que les Static Mesh sont "Substract" par défaut.

Dans quel but utiliser le volume de soustraction Navmesh ?

Vous remarquerez lorsque vous ajoutez un beau Static Mesh au milieu de votre pièce, comme un pilier cylindrique, puis que vous reconstruisez votre Navmesh, tous les points du Navmesh seront très nombreux. La génération automatique des points du Navmesh essaye de correspondre parfaitement à l'enveloppe de collision du static mesh. Ce n'est pas souhaitable dans la plupart des cas car cela crée des millions de petits points et l'AI aura plus de difficultés pour se déplacer.
Pour résoudre ce problème, il faut que le static mesh du pilier soit non-soustrait du navmesh (Not Substract), puis il faut construire un volume de soustraction Navmesh autour de la base. Faites simplement un cube qui englobe la base, cela n'a aucune importance si il ne correspond pas tout à fait à la forme de la colonne. On ne verra pas trop de différence lors du déplacement à moins que vous ayez soustrait un très grand espace sur lequel l'AI peut marcher. Voilà qui fera un joli espace cubique dans le navmesh entourant le pilier, vos AI pourront se déplacer dans la pièce sans problèmes.

Pourquoi utiliser les volumes de soustraction navmesh ?

On les utilise pour les static mesh qui peuvent être foulés par les AI, comme les ponts et plus communément, les escaliers. Vous devrez toujours les faire pour vos escaliers, sinon vos AI seront bloqués et seront incapables de les utiliser.

Admettons que vous ayez déjà créé des escaliers, faites un volume de soustraction navmesh ressemblant à une rampe allant du début à la fin de votre escalier. Paramétrez ce volume à la fois sur Add et Substract du Navmesh (add and subtract from Navmesh )(pour que l'AI n'essaye pas de marcher sous l'escalier). Enlevez le Add / Substract du static mesh de l'escalier ou des surfaces BSP. Si vous ne le faites pas de cette façon, chaque marche aura son ensemble de points qui ne seront pas connectés correctement et seront désordonnés.

Si vous ajoutez un pont (static mesh) à votre map, créez un volume de soustraction Navmesh dont la surface supérieure sera au même niveau avec la zone sur laquelle l'AI doit marcher. Mettez le volume à Add au Navmesh (Add to Navmesh), enlevez le Add / Substract des static mesh.

Cette technique est très utile si vous avez, par exemple, un chemin composé de beaucoup de petits static mesh. Ainsi vous avez un navmesh régulier sur le dessus plutôt qu'un navmesh sur le dessus de chaque petit élément.

Quelques petites notes sur les volumes de soustraction Navmesh.

On peut les faire de n'importe quelle forme, la forme cubique n'est pas obligatoire. Assurez-vous que ce soit des brushes valides, et cela devrait fonctionner.
N'ayez pas peur de changer les lignes verticales ou la forme après la création du volume, cela fonctionnera même après un réajustement.
Les erreurs dues à des réajustements, à un copier/coller s'apparentent aux volumes normaux utilisés à d'autres fins. Cela ne concerne pas les volumes de soustraction navmesh.
Les volumes de soustraction navmesh ne grossissent pas la mémoire ou la taille de votre map, vous êtes libre d'en ajouter autant que vous voulez pour avoir un navmesh correct.

Un petit tutoriel sur les patrouilles…

Vous voilà donc avec un AI dans votre map et vous voulez le faire patrouiller ? Un aller-retour est plutôt facile à mettre en œuvre.

Tout d'abord, placez un AddAIPoint près de votre AI. Vous le trouverez dans le gamesys, Marker > AIPathPoint. Quand vous le placez vous verrez se dessiner une ligne jaune entre l'AI et le AddAIPoint.

Cela montre que l'AI est associé avec ce AddAIPoint, et une fois que votre patrouille est créée, elle est attachée à ce AddAIPoint.

Puis, ajoutez deux actors PatrolPoint. Ils représentent les points sur lesquels l'AI marchera quand il sera en patrouille. Vous devez les connecter entre eux.

Allez d'abord dans le mode de connection PatrolPoint (Patrolpoint connection mode) en cliquant sur le bouton de la barre d'outils gauche en haut (deux sphères vertes avec une flèche).

Une fois que vous êtes dans ce mode, sélectionnez un AddAIPoint et faites SHIFT + clic sur le premier PatrolPoint. Vous devriez voir une ligne entre eux. Cela veut dire que l'AI marchera de son point de départ jusqu'à l'autre quand la map commencera.

Ensuite sélectionnez ce PatrolPoint et faites SHIFT + clic sur le second pour les connecter.

Puis cliquez sur le deuxième PatrolPoint et SHIFT + clic sur le tout premier.

Si vous voulez déconnecter deux points, sélectionnez le premier point et SHIFT + clic sur le point de destination, cela enlèvera le lien entre eux.

Et voilà, vous avez créé une simple patrouille. Assurez-vous d'avoir un Navmesh et testez.

Résumé des fonctions d'autres types de points utilisés dans une patrouille :

ChangeDirectionPoint - Lorsque l'AI atteint ce point, il fait demi-tour et revient sur son chemin de patrouille (en sens inverse). Mettez-le à chaque bout de la patrouille (constituée de multiples PatrolPoints) si vous voulez que l'AI fasse des allers-retours. Vous n'aurez qu'à connecter le chemin pour un aller, l'AI reviendra sur le même chemin automatiquement une fois qu'il aura atteint l'un de ces points.

LookPoint - Connectez un PatrolPoint/ChangeDirectionPoint à un LookPoint. L'AI atteint un PatrolPoint et regarde dans la direction du LookPoint, on peut déterminer le temps qu'il se tient là dans les propriétés.

PlayAnimationPoint - Même fonction que LookPoint, il y a une animation .

HeadTurnPoint - Même chose que le LookPoint sauf que l'AI continue de marcher et tourne la tête en direction du HeadTurnPoint.

FleePoint - On ne le connecte pas à une patrouille, c'est un élément que l'on place tout seul. Quand un AI s'enfuit, il essaye de rejoindre ce point pour se cacher.

WanderPoint - Quand un AI rejoint ce point, il marche tout autour de manière hasardeuse selon le rayon spécifié dans ses propriétés. Notez quez si vous placez ce point sur le chemin d'une patrouille, l'AI ne retournera jamais sur son chemin, il va errer indéfiniment.

Quelques fonctions pratiques de déboguage du Navmesh.

NavMesh links mode : on le voit quand on clique sur le bouton à droite de NavMesh Nodes. Il montre les liens entre les points Navmesh, qui sont en fait les chemins que les AI vont emprunter dans le niveau.

Un autre outil utile pour debugger les patrouilles est disponible quand on est dans le mode Path Connection.

Faites un multi-select de deux PatrolPoints. Une ligne de couleur cyan apparaît entre les deux. Elle représente le chemin que l'AI prendrait entre ces deux points.
Si vous sélectionnez deux PatrolPoints à deux endroits totalement opposés dans le niveau, la ligne cyan parcoure tout le niveau en prenant le chemin le plus court.
Si vous ne voyez pas de ligne cyan, cela veut dire qu'aucun chemin ne peut être créé entre les deux points, votre navmesh doit être mieux ajusté et être correctement connecté ou assez grand pour votre AI.

Ces deux fonctions sont très utiles si vous avez un AI qui refuse de traverser une porte ou un petit pont, etc…

 

Tutoriels sur T3ed
t3ed.tutoriel.free.fr