A l'origine ce qui m'a amené à découvrir les Scriptable object fut la recherche justement d'un système de Finite State Machine pour gérer les différents états que peux prendre un personnage ou un PNJ et les lier à l'animator pour jouer les différentes animations liées à ces différents états.
J'ai donc utilisé comme base le système de state machine utilisé dans le l'open projet d'unity Chop chop développé par deivsky
Celui ci fonctionne comme ceci :
Tout d'abord On crée une table de transition qui contiendra les passages d'un état à un autre selon une ou des conditions.
Un Etat est défini dans la liste si une transition y mène et une transition permet d'en sortir. On peut alors définir des actions pour cet état.
Les Etats :
Chaque état est un SO basé sur le même script qui va contenir une liste d'Actions. les états se différencie par un nom différent.
Les Conditions :
Chaque condition est élaborée à partir d'un script qui va généré un SO, le SO sera alors utilisé dans la table de transition en guise de condition (true ou false) qui va déterminé si on change d'état ou non
Les Actions :
Chaque action est un script que l'on crée avec la mécanique spécifique que l'on désire à l'intérieur , on en fait ensuite un SO qui alimentera la liste des actions d'un Etat.
Actions Paticulières :
Set_Animator_Parameter
Cette Action permet de choisir quand elle s'execute (On State Enter, On State Update, On state Exit) le type de valeur quel renvoit (bool, float, ...) et la valeur.
Grâce a cette action on va pouvoir mettre à true ou false les différents paramètres défini dans l'animator par son nom.
Set Animator Move Speed
Est une action particulière qui permet de transmettre à l'animator la vitesse de déplacement afin d'alimenter en valeur le paramettre speed de l'animator (blend tree)
Avec ce system donc on définit donc un nouvelle etat en créant un SO qui le représente, on crée des transition d'un SO Etat à un autre etat SO, selon des condition qui sont elle aussi sous la forme de SO (des briques réutilisable en somme) et pour chaque etat on définit les différentes action au moyen d'une liste de "brique" (SO) Action.
J'ai juste apporté une customisation aux scripts originels de deivsky en ajoutant un nouveau moment d'exécution en plus de OnEnter_Statement, OnExit_Statement et OnUpload : OnFixedUpdate, car à pour ne pas avoir de bug avec la caméra qui tremblotte, j'exécute les action de physique durant cette update spécifique.
Commentaires
Enregistrer un commentaire