Accueil logo MakeYourGame gachetteG gachetteD paddleG paddleH paddleD paddleB buttonG buttonH buttonD buttonB

Animer son personnage

Unity:Unity développer son jeu sans coder avec Bolt - Niv 1


Animer son personnage

Maintenant que Bob le Blob bouge, il est temps de lui permettre de bouger ! Pour l'instant nous n'avons qu'une image figé de Bob qui glisse sur le sol.

Avant de commencer l'animation

Notre Graphe Bolt commence déjà à être assez conséquent. Avant de continuer, organisons nous un peu et classons nos blocs par groupe logique. Ici j'ai choisis de créer 2 groupes logiques :

  1. Un groupe qui reçoit les commandes claviers et définit la vitesse de Bob
  2. Un groupe qui reçoit le vecteur de déplacement et déplace le GameObject Bob

Créer une variable de graphe

Pour renforcer cette séparation, stockons dans une variable le résultat de la vitesse de déplacement horizontal que l'on souhaite appliqué à Bob. C'est à dire, le résultat des blocs Get Axis et Multiply. Et de l'autre coté récupérons ce résultat pour l'envoyer dans le vecteur 2D qui déplacera Bob.

Note : Sur la capture ci-dessous j'ai pris un peu d'avance et j'ai déjà créer les deux groupes. Tout seras expliquer un peu plus bas dans l'atelier. 

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/ellen20-5f0eca39738d9.jpeg

Donc comme évoquer plus haut, pour bien séparer les deux blocs, j'ai décider de stocker la valeur de déplacement horizontal dans une Graph Variable, le nom importe peu temps que vous respectez la casse. Ici je l'ai appelé Movement. Pour ce faire, il suffit d'utiliser le bloc Set Graph Variable. Nous n'avons encore jamais déclarer cette variable, contrairement à notre variable Speed, que nous avions décider de déclarer dans les propriétés du GameObject Bob, celle-ci est une variable générée par les calculs de notre Graphe et Bolt la génèrera dynamiquement pour nous.

Il est maintenant temps de la récupérer, pour ce faire nous allons appeler Get Graph Variable, et choisir dans la liste déroulante Movement, ou le nom que vous aurez définis.

La dernière étape, relié l'événement déclencheur Update Event à nos deux blocs. Ainsi Bolt sait que sur l'activation de cet event, il doit calculé la valeur de Movement et faire se déplacer Bob. Si vous n'avez pas fait d'erreur, aucun bloc ne doit être en transparence une fois que vous avez terminé.

Note : Dans ce cours, cette action peut paraître superflue, au vue des dimensions de notre graphe, mais il est bon de savoir maîtriser les variables.

Organiser son Graph avec des groupes

Comme vous l'avez remarqué dans la capture ci-dessus, j'ai déjà séparés mes blocs dans 2 groupes distinct. Vous pouvez donner une couleurs à ces groupes, un nom, un commentaire. Le premier groupe Set Movement calcule la vitesse de déplacement horizontal de Bob, le second Get Movement construit le vecteur 2D en récupérant toutes les informations et l'applique au GameObject Bob pour le déplacer.

En créant des groupes indépendants comme ici, cela nous permet de lire plus simplement notre graphe. Même dans notre exemple assez minimaliste, le groupe Set Movement calcule la vitesse de déplacement de Bob. De l'autre coté, Get Movement n'a pas besoin de savoir comment est calculé cette vitesse, il a juste besoin de l'utiliser.

Animer Bob le Blob

Pour l'instant Bob n'a qu'une unique frame, jamais modifié, il laboure plus le terrain qu'il ne marche. Nous allons y remédier maintenant.

Première animation : Bob regarde dans la direction où il se déplace

Notre première étape va être de faire en sorte que Bob regarde à gauche quand il va à gauche, et à droite quand il va... A droite.

Nous pouvons déjà choisir dans quelle direction regarde Bob, pour se faire, il nous suffit de jouer avec les propriété du bloc Transform en jouant sur la valeur de Scale X, en mettant 1 ou -1 pour décider dans quelle direction doit regarder Bob. 

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/ellen21-5f15977fc3c1b.jpeg

C'est comme ça que nous allons demander à Bolt d'agir pour orienter Bob. Résumons ce que nous savons et voulons faire :

  • Ce que nous savons :
    1. Bob doit se regarder dans la direction où il se déplace.
      • Si il se déplace vers la gauche sa vitesse sera négative, si il se déplace vers la droite sa vitesse sera positive.
    2. En modifiant la valeur du vecteur scalaire de Bob, il est possible de définir la direction dans la quelle il regarde.
      • Si la valeur en X est -1 Bob regarde à gauche, si ça valeur est de 1 Bob regarde à droite.
  • Ce que nous devons faire dans Bolt :
    1. Bob doit se regarder dans la direction où il se déplace.
      • Il nous faut tester la vitesse, c'est à dire le vecteur de mouvement de Bob, si sa valeur en X est négative Bob va à gauche, sinon il se déplace vers la droite.
    2. En modifiant la valeur du vecteur scalaire de Bob, il est possible de définir la direction dans la quelle il regarde.
      • En fonction des résultat du test du vecteur de déplacement, nous pouvons décider de la valeur à donner au vecteur scalaire X.

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/ellen22-5f15a03769260.jpeg

  • Encore une fois, par commodité, j'ai récupérer la valeur de la variable Movement qui contient le vecteur X du mouvement de Bob.
  • La valeur du vecteur est testé, c'est à dire comparé à la valeur 0, si A < B, c'est à dire si la valeur de la vitesse est négative, cela renverra true (vrai en français), false sinon.
  • Si le test renvoie true la valeur utilisée sera -1, sinon cela sera 1.
  • Il ne reste plus qu'à créer le vecteur scalaire, avec la bonne valeurs en X et 1 pour Y et Z.

Remarque : Un dernier détails, le cas où le vecteur de vitesse est égal à 0, c'est à dire quand le joueur n'appuis sur aucune touche de déplacement. Notre test est A < B où B vaut 0 c'est à dire qu'il s'agit d'une différence stricte, et donc si A vaut 0, le test est faux et Bob se tourne vers la droite. Pour aller plus loin : Nous voulons que si la vitesse vaut 0 Bob ne change pas de direction, en résumé, nous ne voulons pas touché au vecteur scalaire. Nous allons ajouter 1 bloc pour répondre à cette nouvelle contrainte.

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/ellen23-5f1837e3e58e1.jpeg

Analysons ce dernier bloc. Le bloc Branch reçoit un résultat d'un test en entrée et permet de séparer deux traitement en cas que le résultat soit true ou false. Dans notre cas nous ne voulons modifier le vecteur scalaire que si la vitesse est différente de 0. J'ai choisi de tester A = B, c'est à dire vitesse = 0 donc dans le cas où mon test est vrai, il ne faut rien faire, sinon il faut appeler le processus que nous avons mis en place. Note : Dans Bolt, la flèche en blanc (qui part de Rigidbody 2D vers Branch dans ma capture d'écran est le processus maître. C'est à dire que tout bloc qui n'est pas relié par cette ligne blanche ne sera jamais appelé. Ors dans notre exemple, si le résultat du test A = B est vrai la flèche est interrompu, c'est à dire qu'il ne se passera plus rien. Si le résultat est faut, nous modifions le vecteur scalaire pour que Bob se tourne.

Nous n'utilisons toujours qu'une unique frame, notre personnage n'est toujours pas animé, mais maintenant, il se tourne dans la direction du déplacement et maintiens cette direction quand le joueur ne touche plus rien.

Ranger un peu

Nous avons terminer un nouveau bloc, que j'ai appelé Flip (retourner en anglais). J'en ai profiter pour ajouter un peu de couleur à mes blocs. Voici où nous en sommes actuellement :

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/ellen24-5f183ab9345cf.jpeg

Bob bouge, il marche, il court !

Dernière étape ! Nous allons appelé l'animation du Player. Par chance, Bob possède déjà une machine état prête à l'emploie, allons l'explorer ! Si ce n'est pas déjà fait, je vous invite à ouvrir la fenêtre Animator, dans le menu supérieur de Unity cliquez sur Window > Animation > Animator :

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/unitybolt05-5f201c6c8edcf.jpeg

L'état Entry correspond au moment où la scène est chargée, et votre caractère entre en jeu, il passe dans son état idle, c'est à dire qu'il ne fait rien, il attend.En cliquant sur la flèche qui pointe vers Walk nous pouvons voir comment est gérer la transition entre les deux états. Si la vitesse du personnage dépasse 0.01 alors il passe dans l'état WalkRemarque : La variable Speed utilisé pour passer en état Walk ne correspond pas à la variable que nous avons créer dans Player au début de l'atelier, le fait que ces deux variables aient le même nom n'est pas problématique, mais elles sont toutes les deux différentes. Cette fenêtre Animator est actualisée en fonction des actions de Bob.

https://makeyourgame.fun//upload/users/Twinkel/unitybolt06-5f201eb14b952.jpeg

Sur l'exemple ci-dessus, Je suis entrain de déplacer Bob, son état est donc Walk.

Rappelez vous, la transition entre les états Idle et Walk dépend si la variable Speed est supérieure à 0.01, une vitesse négative ne provoquerait pas le changement d'état, pourtant, si notre personnage va vers la gauche, il devrait être animé malgré tout. Nous allons donc récupérer la valeur absolue de la vitesse du personnage et l'appliquer à la variable Speed de l'Animator.

https://makeyourgame.fun//upload/users/Twinkel/Unitybolt/unitybolt07-5f20210de5731.jpeg

Dernière étapes, relions notre dernier bloc, que j'ai appelé Flip, au bloc Animator SetFloat. Le nom de la variable pour assurer la transition d'état est Speed (attention, cette variable correspond à la variable de Animator). La valeur envoyée est celle de notre variable de movement que nous utilisons depuis le début de l'atelier.  Ne vous reste plus qu'à tester.

Maintenant vous savez faire marcher votre personnage, nous avons vu les fonctions de bases de Bolt. Il peut fournir encore des actions plus complexe qui seront abordés dans de futurs ateliers.





Validation de la session

Veuillez vous connecter ou créer un compte pour pouvoir valider cette session et ainsi gagner encore plus d'XP !


Retour à l'atelier

Continuer sur: Faire se déplacer un GameObject, la Machine Flow ?

Session précédente / suivante

Faire bouger le personnage joueur

A partir de la scène de base créée par le Bolt Kit: Platformer Tutorial Assets (gratuit dans l'Asset Store de Unity) nous allons faire se déplacer et animer le personnage du joueur.

×