Unity Mecanim Comment lire une animation sur Keypress

Mecanim est un outil piloté par l'état pour Unity qui offre aux développeurs un contrôle d'animation avancé et un éditeur riche en fonctionnalités.

Les principales fonctionnalités de Mecanim sont le mélange d'animations et le reciblage d'animations.

Le mélange d'animations est un processus automatique permettant d'effectuer des transitions fluides entre les animations.

Le reciblage d'animation est un processus de réaffectation d'animations existantes pour fonctionner entre plusieurs plates-formes de personnages, éliminant ainsi le besoin de créer de nouvelles animations pour chaque nouveau personnage.

Dans ce tutoriel, je montrerai comment animer un cube et jouer l'animation sur Keypress avec Mecanim.

Pas

Pour animer un cube dans Unity, suivez les étapes ci-dessous:

  • Créer un nouveau cube (GameObject -> Objet 3D -> Cube)

  • Sélectionnez Cube puis ouvrez la fenêtre Animation (Fenêtre -> Animation -> Animation)
  • Dans la fenêtre Animation, cliquez sur "Create", ce qui créera une nouvelle animation, un nouveau Animator Controller, et attachera un composant Animator au Cube.
  • Nommez la nouvelle animation "SpinAnimation"

  • Dans la fenêtre d'animation, cliquez sur AddProperty -> Transform -> Rotation
  • Cette animation aura 2 images, début et fin.
  • Pour la première image, nous définissons la rotation sur (0, 0, 0)

  • Pour la dernière image, nous avons défini la rotation sur (0, 360, 0)

L'animation est prête.

Conseil: Pour créer d'autres animations, cliquez simplement sur le nom de l'animation dans la fenêtre Animation, puis cliquez sur "Create new Clip...".

Pour configurer Mecanim Animator Controller, suivez les étapes ci-dessous:

  • Double-cliquez sur la ressource Animator Controller qui a été créée avec l'animation

  • Une nouvelle fenêtre intitulée "Animator" apparaîtra, qui devrait ressembler à ceci:

  • Vous remarquerez qu'il y a une flèche pointant du "Entry" vers le "SpinAnimation", ce qui signifie que l'animation se jouera dès que la scène commencera, mais ce n'est pas ce que nous voulons, nous voulons pour ne jouer l'animation qu'en appuyant sur une touche.

Étant donné que Mecanim nécessite d'avoir une animation d'entrée, ce que nous pouvons faire est de créer un nouvel état vide et d'en faire une entrée:

  • Clic droit sur la fenêtre Animator -> Créer un état -> Vide:

  • Sélectionnez État d'entrée -> Faites un clic droit dessus -> Définir l'état par défaut de StateMachine, puis pointez sur "New State":

La dernière chose à faire est de faire une transition vers SpinAnimation, mais nous ne voulons faire la transition qu'une fois la condition spécifique remplie, c'est à ce moment que l'onglet Paramètres entre en place:

  • Cliquez sur l'onglet Paramètres dans la fenêtre Animator puis cliquez sur le symbole (+):

Vous remarquerez qu'il existe plusieurs types disponibles, mais pour l'instant, nous allons sélectionner Trigger, il est similaire à bool mais contrairement à bool, il est automatiquement défini sur false une fois l'animation terminée terminé, utile pour les animations one-shot:

  • Nommez le paramètre "spinTrigger"

  • Enfin, sélectionnez "Any State" -> Faites un clic droit dessus -> Créer une transition, puis pointez sur SpinAnimation:

  • Cliquez sur la flèche de transition et dans la vue Inspecteur sous Conditions, cliquez sur (+) et assurez-vous que le paramètre spinTrigger est sélectionné

  • Par défaut, les animations créées avec Unity ont une boucle activée, mais comme nous ne voulons lire l'animation qu'une seule fois, nous devons sélectionner le clip d'animation dans la vue Projet, puis décocher la case Temps de boucle:

Pour pouvoir contrôler les paramètres de Mecanim depuis un script, nous aurons besoin d'utiliser des fonctions spéciales, vérifiez le code ci-dessous:

  • Créez un nouveau script, appelez-le "AnimationTest", supprimez tout puis collez le code ci-dessous à l'intérieur:

AnimationTest.cs

using UnityEngine;

public class AnimationTest : MonoBehaviour
{

    Animator animator;

    // Start is called before the first frame update
    void Start()
    {
        //Get Animator component
        animator = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        //Play spin animation on key press
        if (Input.GetKeyDown(KeyCode.Q))
        {
            animator.SetTrigger("spinTrigger");
        }
    }
}
  • Attachez le script AnimationTest.cs au cube avec le composant Animator:

Testons-le maintenant:

Sharp Coder Lecteur vidéo

Tout fonctionne comme prévu, en appuyant sur Q joue l'animation.