Articles

Machines à états finis [Partie 1] – Ressources de développement Unity de TKoU

Les machines à états finis pourraient être quelque chose que tous les développeurs pourraient avoir entendu au moins une fois dans leurs quelques années de démarrage du développement de jeux dans Unity.

Qu’est-ce qu’une machine à états finis de toute façon ? Eh bien, il y a beaucoup à couvrir c’est pourquoi nous allons faire au moins 3 parties. Fondamentalement, une machine à états finis (ou FSM) est un modèle de conception où l’automatisation entre en jeu. Communément utilisé dans les implémentations de l’IA pour certains comportements. Par exemple, la marche, l’attaque, le ralenti, etc. Le FSM peut également être implémenté dans les PNJ et est le plus courant dans les RPG à monde ouvert.

fsm1Traitons le FSM comme un overseer:

Maintenant, l’overseer vérifie l’état d’une IA. En fonction de cet état, l’IA réagira. De même, selon le type d’une IA (si c’est un type de vol, ou un type de sol, ou un type de natation) est l’action que l’IA fera. Dans ce scénario, le FSM indique à l’IA qu’elle est en « état de patrouille », et lui dira de « marcher de A à B ». A moins qu’il y ait un changement d’état, l’IA ne fera que marcher de A à B.

fsm2

Pour changer d’état, nous devons d’abord avoir une condition. Dans l’image de gauche, l’IA voit le joueur, et le dit à l’overseer. Maintenant, le surveillant va changer l’état de l’IA, et va commencer à attaquer.

1ZmLLoS1bAl71Ea_BNZzHWaja5YsjvqLa2z-ubNYEncore, l’IA recommence à patrouiller puisque le joueur n’est pas dans sa ligne de vue.

Comme on le voit dans ces dessins mal faits, chaque état a ses conditions avant de passer à d’autres états.

Regardons le schéma ci-dessous.

sNz-b43jHw-bZzuRbNlrvHQ

Voici un schéma des états d’une IA normale. Les lignes rouges représentent les faux sur la condition qui est nécessaire pour changer d’état. Le diagramme est assez simple. L’IA sera en état de veille si elle atteint sa destination, et vice versa. S’il voit un ennemi, il commencera à attaquer. Le FSM gère maintenant toutes les transitions entre les états et aide l’IA à faire l’action qui est disponible pour cet état.

Maintenant, décomposons notre système FSM.

  • Système FSM principal – C’est lui qui va contrôler les états de l’IA et vérifier si les conditions entre les états. Le FSM principal contiendra tous les états, et gérera les appels d’événements des actions FSM.
  • FSM State – Ceci détermine l’état actuel de l’IA et contient toutes les actions qui est placé sur l’IA.
  • FSM Action – Ce sera l’action que l’IA fera quand l’IA est dans un état spécifique.

Maintenant comment allons-nous faire ? Mettons tout en place.

sV8-Gi7zqfM4YoWEXA-SCGw

Ce sera la boucle de notre FSM. D’abord, nous initialisons le FSM, nous créons des états, des actions, et nous les mappons tous ensemble. Après les avoir mappés, nous allons maintenant démarrer le FSM et indiquer l’état dans lequel l’IA va commencer. Maintenant, l’IA va passer à un état spécifique, et le FSM va initialiser l’action, la mettre à jour jusqu’à ce que l’action se termine et envoyer un événement indiquant que l’action est terminée. Enfin, le FSM reviendra en arrière et changera l’état.

Une autre chose qui causera un changement d’état est quand un événement est appelé en dehors de la logique de l’IA. Comme lorsque nous créons un commandant et qu’il dit à tous les soldats d’arrêter de bouger.

Ceci termine la première partie de notre tutoriel FSM. J’espère que je vous ai bien expliqué le FSM. Si vous ne comprenez toujours pas, probablement vous aurez besoin de voir tout en action d’abord, et voir tout scanner par vous-même. C’est comme ça que je l’ai appris.
Dans la prochaine partie, nous allons d’abord discuter à nouveau de quelques implémentations simples de FSM dans la vie réelle, et nous commencerons à scripter notre moteur FSM entier à partir de zéro !