Après plusieurs semaines à m'occuper de collecter des personnages, je reviens avec un peu de recul du coup à la programmation du Character controller. L'ancienne version basée sur l'open project Chop Chop de Unity et une State Machine repiquée de là me posait plusieurs soucis, tout d'abord je ne maîtrisais pas tout, cette state machine restait encore un peu black box pour moi, il y a avait pleins de petit problèmes réglé ou pas à coup de je met ça là ou dans cette ordre là ça semble aller mieux mais je sais pas pourquoi, bref je voulais plus de maîtrise sur le code
De plus j'aimais bien l'idée de Jangwon Choi de RoundbearGame d'utiliser l'animator comme state machine. On repart donc de zero mais cette fois chaque partie que j'intègre je l'étudie jusqu'à la comprendre.
Bien entendu quand je dis que je repart de zéro c'est pas tout à fait vrai certaines mécaniques ou partie de script (Input, crounching, ground detection) de l'ancienne version me convenait bien, je les intègre donc à la nouvelle version et j'en rajoute quelques nouvelles ou ébauche de nouvelle comme bander un arc.
Un système de ragdoll pour avoir des détecteurs de collision pouvant répondre à la physique généré par unity ou comme trigger de colllision pour chaque membre du personnage.
Voici donc le nouveau controleur dans les grandes lignes :
Using Animator as State Machine
Grace à cette classe que je vais ajouter sur les différents états de l'animator je vais pouvoir y coller des 'Abilities' sous forme de Scriptable object où chaque 'Abbility' est un script permettant de faire quelque chose. soit sur le onEnter de l'Etat, l'Update de l'Etat ou le OnExit de celui-ci.
Idle par exemple où il y a 3 'Abbilities' : Idle le script de l'état de idle (qui s'assure que le movement est null), HoldObjectIdle pour remettre les l'arc dans le dos, Magic off pour s'asurer que le mode magic est off et par la suite je peux en ajouter d'autre.
Les transitions sont celles créées dans l'animator
Chaque transition à sa condition lié à un paramètre que l'on retrouve à la fois dans l'animator et dans le script du characterControl. L'idée étant que ce dernier stock la valeur du paramètre tandis que soit l'input controller lorsque l'on utilise un input soit le charactercontrol ou un état modifie ce paramètre du character controller et transmet la valeur à l'animateur.
Abilities Script
Abilities Scriptable Object
Viens ensuite une organisation de l'Animator et des Etats en sous-etat pour plus de clarté
Animator Base Layerr
Animator Idle State
Animator Ground Movement
Animator Tactical Movement
Animator Air Movement
Animator Melee Weapon Attack
Animator Free Hand Fight
Animator Magic Spells
Animator Range Weapon Attack
Input Controller
Character Controller
Commentaires
Enregistrer un commentaire