Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
We use cookies to ensure that we provide you with the best possible experience on our site.
Votre source incontournable sur Unity et le développement web
Votre source incontournable sur Unity et le développement web
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
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
}
}
Dans l’Inspecteur, vous pouvez maintenant associer l’événement d’animation à la fonction désignée (par exemple, « BeginFallen »).
Il est essentiel de noter que tout autre animateur utilisant cette animation doit également inclure le composant « AnimatorTest » pour éviter les exceptions.
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);
}
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.
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).
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« .
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é.
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.