Unity animation event add event

Unity – Événement d’animation (Event)

Dans Unity, la capacité à déclencher des événements à des moments spécifiques au sein d’une animation est primordial.

Unity propose une fonctionnalité appelée « animation events » qui permet l’intégration d’actions personnalisées à des moments précis au cours d’une séquence d’animation.
Cependant, lors de la gestion de plusieurs événements au sein d’un seul état, Unity offre une solution plus avancée appelée StateMachineBehaviour.

Cet article explore l’utilisation des events d’animation et l’intégration de StateMachineBehaviour pour optimiser les workflow de l’animateur.

Table des matières

Unity animation d’événements : Utilisation de base

Pour utiliser les événements d’animation dans Unity, un GameObject avec un composant « Animator » et au moins un clip est requis.

Prenons l’exemple d’une animation « Death », nous souhaitons déclencher un événement lorsque le personnage commence à s’agenouiller.


using UnityEngine;

public class AnimatorTest : MonoBehaviour
{
    // Nous allons déclencher cet événement
    public void BeginFallen()
    {
        // Des actions personnalisées peuvent être placées ici
    }
}
    
  1. Sélectionnez le GameObject dans la hiérarchie de la scène.
  2. Ajoutez le composant « AnimatorTest ».
  3. Ouvrez l’onglet Animation via « Fenêtre » -> « Animation » -> « Animation. »
  4. Choisissez le clip d’animation spécifique.
  5. Utilisez le curseur de la chronologie d’animation pour vous déplacer jusqu’au moment de l’événement souhaité.
  6. Cliquez sur le bouton « Ajouter un événement » pour ajouter un événement d’animation au moment sélectionné.

Ajouter un événement d'animation Unity

Dans l’Inspecteur, vous pouvez maintenant associer l’événement d’animation à la fonction désignée (par exemple, « BeginFallen »).

Ajouter une fonction d'événement d'animation Unity

Il est essentiel de noter que tout autre animateur utilisant cette animation doit également inclure le composant « AnimatorTest » pour éviter les exceptions.

Animation d’événements avec des paramètres

Dans Unity, les événements d’animation prennent en charge des paramètres, ce qui peut améliorer la flexibilité et la réutilisation.

Par exemple : envisagez une situation où vous devez afficher différents messages à l’écran à des moments spécifiques de l’animation.

Au lieu de créer des méthodes distinctes pour chaque message, vous pouvez utiliser une approche paramétrée :


public void UIMessage(string message)
{
    UIManager.Instance.DisplayMessage(message);
}
    

Événement d'animation Unity avec un paramètre

Avec cette approche, vous pouvez envoyer n’importe quel message en tant que paramètre à la fonction « UIMessage », éliminant ainsi le besoin de créer des fonctions individuelles pour chaque message unique.

Gérer les états avec StateMachineBehaviour

Travailler avec un animator Unity implique souvent la nécessité de savoir quand une transition d’état aura lieu.
Par exemple : lors de la transition entre les états en utilisant une condition booléenne, il n’y a aucune garantie que le changement d’état se produira immédiatement.

Les StateMachineBehaviours résolvent ce problème et offrent des fonctionnalités supplémentaires.

Dans l’onglet de l’animateur (« Fenêtre » -> « Animation » -> « Animator »), vous pouvez ajouter un StateMachineBehaviour à un état spécifique ou à tous les états d’une couche.

Ces comportements sont des scripts qui héritent de « StateMachineBehaviour » et contiennent des fonctions remplacées pour différents événements (OnStateEnter, OnStateExit, OnStateIK, OnStateMove, OnStateUpdate).

StateMachineBehaviour Unity

Voici un exemple qui utilise OnStateEnter et OnStateExit :

using UnityEngine;

public class EventAnimation2nd : StateMachineBehaviour
{
    private AnimatorTest _animatorTest;

    public AnimatorTest GetAnimatorTest(Animator animator)
    {
        if (_animatorTest == null)
        {
            _animatorTest = animator.GetComponent();
        }

        return _animatorTest;
    }

    // OnStateEnter est appelé lorsqu'une transition commence et que la machine d'état commence à évaluer cet état
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        var animatorTest = GetAnimatorTest(animator);
        // Des actions personnalisées peuvent être appelées dans StateMachineBehaviour
    }

    // OnStateExit est appelé lorsqu'une transition se termine et que la machine d'état a terminé l'évaluation de cet état
    override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        var animatorTest = GetAnimatorTest(animator);
        // D'autres actions personnalisées peuvent être exécutées à la sortie de l'état
    }
}
    

Dans le code fourni, « AnimatorTest » représente un MonoBehaviour attaché au GameObject.

En utilisant les StateMachineBehaviours, des actions peuvent être dirigées vers un MonoBehaviour, améliorant la flexibilité dans la gestion des animations.

Un example de mise en cache d’une instance MonoBehaviour est montré via la méthode « GetAnimatorTest« .

Partager la même instance

Pour les scénarios avec de nombreux animateurs, les performances peuvent être optimisées en utilisant l’attribut SharedBetweenAnimators.
Cela garantit que le StateMachineBehaviour n’est instancié qu’une fois et partagé entre plusieurs animateurs.

Lors de l’utilisation de cet attribut, une légère modification du code de mise en cache sera nécessaire pour la compatibilité.

Conclusion

Pour conclure, en mettant en œuvre des événements d’animation et des StateMachineBehaviours, les développeurs Unity peuvent améliorer considérablement leur contrôle sur les animations et rationaliser des flux de travail complexes.

Laisser un commentaire

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