Ressources Magic Makers

 

Site en maintenance

 
Nous sommes actuellement entrain de mettre à jour les ressources de ce site.
Pendant la mise à jour vous pouvez retrouver tous les nouveaux contenus sur le site
 

https://lp-magicmakers.fr/

 
 

UNITY - Animations

Importer et définir une nouvelle animation

Pour un GameObject

Si tu veux animer un GameObjet simple comme un cube, tu peux utiliser la fenêtre Animation !

La première chose à faire est de créer un nouveau clip :

On active ensuite le mode enregistrement.

On peut maintenant commencer à créer nos animations ! On va simplement définir des positions clés en fonction du temps.

N’oublie pas de définir une position de départ !

Tu peux voir le rendu de ton animation en cliquant sur le symbole Play !

Relier les animations entre elles

Qu'est-ce que l'Animator Component ?

L’animator Component sert à donner des animations à un GameObject.

On lui donne un Controller qui contrôle les animations et leur enchaînement et un avatar qui contrôle le GameObject s’il est du type ‘Humanoid’.

Les trois autres paramètres permettent de définir si les positions et rotations sont définies par les clips d’animations ou un script (Apply root motion), quand l’Animator se met à jour (Update Mode) et de choisir si les animations sont toujours visibles ou seulement quand le GameObject est dans le champ de la caméra (Culling Mode).

 

Qu'est-ce que l'Animator Controller et la fenêtre Animator ?

L’animator Controller sert à définir les clips d’animations, les relier entre eux et définir les transitions entre.

Ils comportent beaucoup de paramètres. Voici les plus importants :

Pour ajouter des animations, tu peux simplement les glisser dans la fenêtre.

La première animation que tu ajoutes crée une connexion automatiquement avec le bloc ‘entry’. Ce bloc permet de désigner la première animation à déclencher au lancement du jeu. Tu pourras la changer plus tard avec la commande ‘Set StateMachine Default State’ (clic droit sur ‘Entry’).

Chacune de ces animations correspond à un état de notre GameObject et les transitions vont permettre de passer d’un état à un autre.

Pour naviguer dans l’interface, tu peux appuyer sur la touche A pour tout voir ou sélectionner une partie et appuyer sur la touche F pour se focaliser sur la sélection.

 

Comment modifier une transition entre animations ?

Lorsque tu as plusieurs animations, tu peux gérer les différentes transitions et ajouter des conditions pour passer d’une animation à l’autre.

Ces conditions doivent être crées directement depuis l’Animator, mais il faut également créer un Script qui va gérer comment les transitions se déclenchent.

Tu peux supprimer ta transition depuis l’Inspector, si besoin :

Pour pouvoir ajouter une condition, il faut d’abord créer un paramètre dans la partie gauche de la fenêtre.

Ce paramètre peut être de différents types (Bool : un Booléen c’est à dire vrai ou faux, Int : un nombre entier, Float : un nombre à virgule). Pour qu’une transition se fasse, l’Animator va regarder si la valeur de ce paramètre respecte la condition de changement d’état.

Pour créer un paramètre, on sélectionne son type et on lui donne un nom.

Ensuite on peut ajouter des conditions sur la transition dans l’Inspector. Pour chaque condition on va choisir le paramètre et les valeurs satisfaisant la condition (pour un Bool vrai ou faux, pour un Int ou un Bool si la valeur est supérieure, égale ou inférieure à une autre).

Pour déclencher les transitions, il faut ensuite faire un script pour définir à quoi correspondent réellement les paramètres et récupérer leur valeur.

Tu peux aussi modifier d’autres paramètres tels que le temps de la transition, est-ce qu’elles se chevauchent un peu, beaucoup, etc. Regarde le schéma ci-dessus pour en savoir un peu plus !

Attention : Si tu coches la case Has exit Time, tes conditions ne seront regardées qu’une fois Exit Time fini.

Tu vas maintenant pouvoir gérer tes paramètres depuis un script et déclencher les transitions.

Par exemple, si l’on veut que la transition ait lieu quand on appuie sur une touche, il faut savoir si la touche est appuyé ou alors si on veut la déclencher si l’on rentre en collision avec un objet, il faut détecter que la collision ait lieu.

Programmer les animations

Pour programmer les animations nous allons créer un script.

Pour le créer, il faut faire un Clic-droit dans l’onglet Project (en bas) puis Create > C# Script. Tu devras choisir un nom pour ton script, pense à mettre un nom qui a un sens. Par exemple AnimateurBarbare pour l’animation d’un barbare ou AnimateurCube pour un cube….

Pour ouvrir un script et pouvoir le modifier, il te suffit de double-cliquer dessus. L’interface Monodevelop ou VisualStudio va s’ouvrir et tu vas pouvoir écrire/modifier ton script en C# !

N’hésite pas consulter la page sur la création de Script pour plus d’informations.

 

 

Comment programmer tes animations

Pour accéder à l’Animator du GameObject qui va jouer les animations nous allons devoir le récupérer.

De manière générale, on va préférer définir une variable dans le script pour notre objet, mais choisir le GameObject depuis l’interface Unity. (Comme dans l’exemple ci-contre)

Pour pouvoir choisir le GameObject directement depuis Unity, on va définir une variable public.

Ce mot-clé ‘public’ indique que l’on peut modifier le contenu de la variable ailleurs que dans le script.

Attention ce mot-clé public doit toujours apparaître en premier lors de la définition de la variable.

Choisir l’Animator depuis Unity avec une variable public dans notre Script.

En C#, à chaque fois que l’on veut créer une variable il faut définir le type. En plus des types simples (Int, Bool, Float), il existe plein de types complexes pour les différents GameObject et leurs éléments.

Pour les animations, l’objet que l’on utilise est l’Animator. Notre variable contenant l’Animator sera donc de type Animator. Attention la déclaration de type se fait avant de donner le nom de la variable mais après le mot-clé public.

Ainsi notre déclaration ressemble à ça :

Attention ! Sur tous les codes suivants, ‘anim’ fait référence au code ci-contre !

L’endroit ou l’on écrit notre code est important.

Les déclarations de variables se mettent avant les fonctions qu’on utilise comme dans l’exemple ci-contre.

Il existe différentes fonctions qui sont déclenchées à différents moments du jeu. Par exemple la fonction Start() qui se déclenche une fois en début de partie, ou la fonction Update() qui se déclenche à chaque mise à jour du jeu.

Tu peux retrouver d’autres fonctions utiles comme OnTriggerEnter() ou OnTriggerExit() en allant sur la page de création de Scripts.

Attention en C#, il faut toujours mettre un « ; « en fin de ligne !

 

Programmer les paramètres d'une transition

Après avoir créer tes paramètres dans l’Animator et avoir régler les valeurs déclenchant les transitions, on va utiliser notre script pour changer ces paramètres aux moments voulus.

Pour modifier les valeurs des paramètres, on va pouvoir utiliser les fonctions suivantes :

Ces fonctions vont être appelées à différents endroits du code en fonction de ce que l’on veut faire. D’autres fonctions peuvent être utiles par exemple pour récupérer si une touche est appuyée ou si la souris est cliquée… N’hésite pas à te rendre sur la page Création de Scripts pour trouver les informations qui te serons utiles.

Exemple et vérification du bon fonctionnement de nos transitions

Voici un petit exemple pour vérifier que nos transitions fonctionnent correctement.

On a un cube avec trois animations :

    • cube-animation1 qui fait tourner le cube sur lui même
    • cube-animation2 qui fait grossir et rétrécir le cube
    • cube-animation3 qui fait se déplacer le cube de haut en bas en changeant de taille

On a également les transitions suivantes :

    • au départ le cube se trouve dans l’animation 1
    • lorsqu’on touche le cube on passe de l’animation 1 à la 2
    • quand il n’est plus touché on passe de la 2 à la 1
    • si l’on est sur l’animation 2 et qu’on appuie sur la touche P on passe à l’animation 3
    • on passe de l’animation 3 à l’animation 2 quand on relâche la touche P

On a donc le graphe suivant :

Pour réaliser le script nous aurons donc besoin d’utiliser les fonctions permettant de détecter la collision et celles permettant de détecter l’appui sur une touche.

Nos paramètres sont des booléens on utilisera donc anim.setBool() pour changer leurs valeurs.

Pour la collision on peut utiliser les fonctions OnTriggerEnter() et OnTriggerExit().

Pour les touches on peut utiliser la fonction Update() et vérifier si la touche que l’on souhaite est appuyée avec Input.GetKey (KeyCode.nom_de_ma_touche) qui retourne vrai si la touche en question est appuyée et faux sinon.

Une fois qu’on a mis le script sur notre objet et que la variable Anim contient notre Animator, on peut lancer le jeu et tester nos animations.

Il peut être intéressant de garder la fenêtre Animator ouverte en bas de page pour voir si les transitions et les animations tournent correctement.

On voit sur le graphe une barre de progression en bleu sur l’animation qui est en cours. Quand on change d’animation la flèche de transition passe en bleu. On voit aussi que la valeur des variables change dans la partie paramètre (cases cochées pour les booléens).

Le graphe peut être très utile en cas de problème pour voir si les transitions sont bien faites et détecter d’où vient le problème.

Jouer un clip d'animation

Pour jouer un clip d’animation, tu peux simplement utiliser ‘Play’ et spécifier ensuite le nom du clip à jouer !