Piloter une animation avec Mecanim. Il faut que ça bouge !

Lorsque vous construisez une expérience vidéo-ludique, il faut qu’il y ait de l’interaction, que ça bouge. Voyons comment il est possible de piloter une animation avec Mecanim afin de donner vie à vos univers.

Introduction

Mecanim, c’est le nom du moteur d’animation utilisé par Unity 3D. Lorsque vous importez un modèle 3D qui possède des animations, celles-ci sont converties pour être interprétées par Mecanim.

Si vous avez plusieurs animations sur un même modèle, il devient alors indispensable d’utiliser un Animator. C’est le chef d’orchestre. Il va piloter les animations et s’occuper des transitions entre elles.

Mais ça ne s’arrête pas là. En effet, directement depuis Unity, vous pouvez créer vos propres animations à partir de n’importe quel GameObject. Même pas besoin d’importer un modèle avec une animation.

Prêt à découvrir tout ça ?

Mecanim, comment ça marche ?

Pour commencer, il nous faut un GameObject que l’on va animer. Nous sommes en plein été au moment de l’écriture de cet article et il fait très chaud… Nous allons donc faire un… ventilateur ! En assemblant quelques cubes, on peut rapidement obtenir quelque chose qui s’en rapproche :

Exemple de modèle 2D à animer

Parlons maintenant des animations. Pour créer une animation, il vous faut tout d’abord ouvrir la fenêtre « Animation » disponible ici :

Menu pour ouvrir la fenêtre d'animation avec Mecanim

La création d’animation utilise une timeline représentant horizontalement le temps. Verticalement, chaque ligne correspond à une propriété du GameObject. Sur cette timeline, vous allez placer des points clé. A chaque point clé, une propriété du GameObject va changer de valeur. Mecanim se charge ensuite de faire les interpolations entre les différentes valeurs ce qui va crée l’animation  au fil du temps.

La gestion d’Animation

Pour créer une animation, sélectionnez le GameObject pour lequel vous voulez créer une animation et dans la fenêtre Animation, cliquez sur le bouton au milieu :

Bouton de création d'une animation avec Mecanim

Appelez l’animation Idle. La fenêtre d’Animation change :

Dopesheet de création d'animation avec Mecanim

Vous pouvez voir la timeline à droite avec le déroulement du temps. A gauche se trouveront les différentes propriétés du GameObject impactées par l’animation.  En haut de la zone de gauche se situent les boutons d’action vous permettant de naviguer dans l’animation en cours. Vous avez également le nom de l’animation en cours d’édition (ici Idle) ainsi que la vitesse d’animation. Les deux dernières icones permettent d’ajouter un point clé que nous verrons plus bas ainsi qu’un événement.

Avant de continuer, créez une nouvelle animation « Running » (vous verrez pourquoi plus bas). Pour se faire, ouvrez le menu déroulant d’animation ici :

Menu de sélection d'animation

Nous voilà maintenant sur l’animation « Running ».

Menu de sélection d'animation avec plusieurs éléments

L’un des points forts de Mecanim est la façon d’enregistrer les animations. Si vous cliquez sur le point rouge, vous passez en mode enregistrement. Pour savoir si vous êtes dans ce mode, jetez un oeil aux contrôles de test. S’ils sont rouges, c’est que vous êtes en mode enregistrement !

Boutons d'action en mode enregistrement

Dès lors, toutes les modifications effectuées sur le GameObject sur la scène seront enregistrés dans l’animation à l’endroit où est la barre rouge. Cette barre rouge correspond au curseur d’animation. Ce curseur définit à quel endroit de l’animation vous êtes. En mode enregistrement, lorsque vous modifiez une propriété du GameObject, un point clé est créé à la position du curseur d’animation et la propriété correspondante est automatiquement ajoutée.

Créer l’animation avec Mecanim

Vérifiez que vous êtes bien en mode enregistrement. Pour commencer, cliquez sur le bouton Add Property. Un menu vous montre alors tous les composants du GameObject ainsi que les GameObjects enfants de ce GameObject. Twist : Mecanim sait animer les enfants d’un GameObject aussi :

Exemple de propriétés modifiables dans une animation avec Mecanim

On peut voir ici toutes les pales du ventilateur. Ouvrez l’élément Transform et ajoutez la propriété rotation. Vous obtenez une nouvelle propriété :

Utilisation du Dopesheet pour crée une animation avec Mecanim

Deux points clés sont créés automatiquement : le début et la fin de l’animation. Déplacez le curseur en cliquant sur la timeline pour sélectionner la dernière frame de l’animation. Modifiez la rotation de votre ventilateur :

Positionnement du curseur dans le Dopesheet

C’est là que ça devient intéressant. Toujours en mode enregistrement, déplacez le curseur d’animation. Vous verrez le résultat de l’animation sur la scène !

Résultat de l'animation

Sortez du mode enregistrement, les animations sont prêtes. Passons maintenant à leur orchestration.

Gérer les transitions

Comme vu dans l’introduction, les animations peuvent être orchestrées par un Animator. Ouvrez donc la fenêtre Animator :

Utilisation de l'Animator

Surprise, Unity a déjà créé un animator avec toutes les animations que vous avez créé. Si vous jetez un oeil à l’inspecteur de votre GameObject, un composant Animator lui est affecté.

Dans la fenêtre Animator, chaque bloc correspond à un état. L’animator va passer d’un état à un autre via des transitions. Dans notre cas, un « état » représente une animation qui sera donc jouée. La flèche orange correspond à l’état par défaut sur lequel l’Animator commencera son cycle. C’est Idle, donc c’est parfait.

Pour ajouter une transition, faites un clic droit sur un état, puis « Make Transition » et cliquez sur un autre état. Voilà, vous avez créé une transition :

Création d'une transition

Par défaut, les transition sont prévues pour se déclencher dès la fin de leur animation associée. Donc ici, une fois l’animation « Idle » terminée, l’Animator va basculer sur l’animation « Running » et rester dessus puisqu’il n’y a pas d’autres transitions possibles depuis cet état.

Ajoutez une autre transition dans le sens inverse, de « Running » vers « Idle » et cliquez sur Play. Les animations s’enchainent, et vous voyez même en temps réel ce qui se passe au niveau de l’Animator :

Transition automatique entre les animations

Cool hein ? Mais les animations s’enchaînent et ce n’est pas ce que nous voulons. L’Animator peut exposer des paramètres et se baser sur ces valeurs pour effectuer des transitions. C’est ce que nous allons faire plus bas.

Créer des variables et les utiliser

Nous allons ajouter un paramètre de type Trigger à l’Animator. Un paramètre de type Trigger est un booléen particulier. En effet, si l’Animator se sert de cette variable, elle sera remise à false automatiquement. Ce Trigger va donc nous permettre de lancer ou arrêter le ventilateur.

Pour créer le Trigger, sélectionnez l’onglet Parameters, cliquez sur le plus et choisissez Trigger. Nommez votre Trigger, et c’est bon !

Création d'un paramètre

Il faut maintenant l’utiliser dans les transitions. Sélectionnez une des transitions entre les deux états en cliquant dessus. L’inspecteur se remplit avec les paramètres de la transition :

Paramétrage de la transition

Commencez par ajouter une condition. Comme vous n’avez qu’un seul paramètre, le trigger est automatiquement sélectionné. A partir de maintenant, la transition ne se fera que lorsque le trigger sera à vrai.

La dernière étape est de créer un script qui va activer le trigger sur l’Animator :

public class FanManager : MonoBehaviour
{
    private Animator _animator;
    private int _hashOnOff;

    private void Start()
    {
        _animator = GetComponent(typeof(Animator)) as Animator;
        _hashOnOff = Animator.StringToHash("OnOff");
    }

    private void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            _animator.SetTrigger(_hashOnOff);
        }
    }
}

Dans la méthode Start, on stocke la référence vers l’Animator pour ne pas avoir à la recharger à chaque boucle Update. On calcule également le hash de notre paramètre. Pourquoi ? Parce que lorsque vous passez un paramètre à l’Animator en lui indiquant le nom du paramètre, il va recalculer le hash en interne. Il est donc meilleur pour les performances de le calculer une bonne fois pour toutes !

Attachez ce script à votre ventilateur et testez. Dès que vous appuyez sur espace, le ventilateur s’allume ou s’arrête selon son état actuel.

Conclusion

Voilà, vous avez un aperçu du fonctionnement de Mecanim. Cet article est allé très vite sur certains aspects et beaucoup de choses ont été ignorées pour se focaliser sur le plus important. Maintenant c’est à vous de jouer pour découvrir les subtilités ! Vous pouvez trouver plus de détails sur la documentation ici : https://docs.unity3d.com/Manual/MecanimFAQ.html

Pour aller plus loin, sachez que Mecanim peut être utiliser pour piloter tout et n’importe quoi, et pas que des animations. Vous pouvez vous servir de Mecanim pour gérer une IA par exemple. Il existe également d’autres moyens de piloter Mecanim.

 

Envie que le site traite d’un sujet particulier ? Envoyez vos besoins à alex@esprit-unity.fr

Et surtout, si vous voulez continuer de lire des articles de ce type en français, Soutenez Esprit Unity en partageant cet article sur les réseaux sociaux !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *