Utilisation d'événements d'animation
Les événements d'animation fournissent un moyen d'appeler une fonction personnalisée ou d'effectuer une action à un moment spécifique dans un clip d'animation.
Cela permet l'interaction entre les animations et les scripts, et est utile lors de l'exécution d'actions au moment exact d'une animation.
L'exemple suivant ajoute un événement d'animation à un objet animé.
Cette structure envoie des informations au journal de la console chaque fois qu'un événement est exécuté en ajoutant un événement de montée et un événement de descente à l'animation qui se répète vers le haut et vers le bas.
1) Sélectionnez GameObject > Objet 3D > Cube pour créer un cube dans la scène.
- Sélectionnez le cube créé et ajoutez un composant Animator en cliquant sur le bouton Ajouter un composant dans le panneau Inspecteur.
- Appliquez le contrôleur Animator du cube à l'Animator ajouté.
- Appliquez le clip d'animation du cube à l'entrée du contrôleur Animator du cube afin que l'animation du cube puisse être jouée lorsque la scène est jouée.
Veuillez vous référer au guide suivant pour l'enregistrement de l'Animator et l'édition des clips d'animation.
📘 Guide des événements d'animation Unity https://docs.unity3d.com/kr/current/Manual/script-AnimationWindowEvent.html
📘 Tutoriel d'animation Unity Learn https://learn.unity.com/tutorial/may-18-animation?language=en#
2) Ajoutez les propriétés suivantes au clip d'animation du cube.
- Il y a une image clé de Position (x: 0, y:0, z:0) dans la section de 0 seconde, 2 secondes du clip d'animation du cube.
- Il y a une image clé de Position (x: 0, y:1, z:0) dans la section de 1 seconde du clip d'animation du cube.
(1) Enregistrez un Événement d'Animation dans la section de 1 seconde du clip d'animation du cube.
- Fonction : Invoker
- Chaîne : Haut
(2) Enregistrez un Événement d'Animation dans la section de 2 secondes du clip d'animation du cube.
- Fonction : Invoker
- Chaîne : Bas
- Lors de l'écriture d'événements d'animation en C# dans Unity, écrivez le nom de la fonction dans Function.
- Cependant, pour appeler un événement d'animation en TypeScript, Invoke doit être écrit dans Funtion et le nom de la fonction doit être écrit dans String, la valeur de l'argument.
3) Créer un projet > Créer > ZEPETO > TypeScript et le renommer en ObjectAnimationController.
- Écrivez un script d'exemple comme ci-dessous.
4) Si vous appuyez sur le bouton de lecture pour l'exécuter, vous pouvez voir la sortie du journal de la console pendant que l'animation du cube est jouée.
Pour ajouter des événements d'animation à l'Animator du personnage de ZEPETO, l'événement doit être ajouté à l'exécution, lorsque le personnage est créé.
L'exemple suivant applique un événement à un Clip d'Animation spécifique de l'Animator du joueur local à l'exécution, et joue un son de pas lorsque l'événement se déclenche.
1) Créez un script FootStepController qui sera appliqué à l'objet animateur du joueur local. FootStepController est responsable de l'ajout d'événements d'animation à l'Animator.
- Créer Projet > Créer > ZEPETO > TypeScript et renommez-le en FootStepController.
- Écrivez le script comme ci-dessous.
- description du script
- FootStepController ajoute un événement d'animation et joue un effet sonore de pas lorsque cet événement se produit.
- SetAudio() ajoute un composant AudioSource pour appliquer le son de pas à l'objet.
- AddAnimationClipEvent() ajoute un événement d'animation au clip d'animation spécifié. Vous devez mettre les éléments suivants comme valeurs d'argument.
- Animateur pour le joueur local
- Nom du clip d'animation auquel l'événement est appliqué
- Un tableau de temps d'animation auquel appliquer l'événement
- Dans le newEvent enregistré avec AddAnimationClipEvent(), les éléments suivants sont définis.
(1) newEvent.time : Le temps d'animation lorsque l'événement se déclenche. Une valeur de 0 est le début de la durée totale, et une valeur de 1 est la fin de la durée totale.
(2) newEvent.functionName : Le nom de la fonction que l'événement déclenche. En TypeScript, il doit être typé comme "Invoke".
(3) newEvent.stringParameter : La valeur du paramètre définie pour la fonction lorsque l'événement exécute la fonction. TypeScript liste le nom de la fonction à exécuter.
- Lorsqu'un événement se produit, ActivateFootSteps() est exécuté et les sons de pas sont joués.
2) Maintenant, créez un FootStepManager qui ajoute un composant FootStepController à l'objet Animator du joueur local lorsque le joueur local est créé à l'exécution.
- Projet > Créer > ZEPETO > TypeScript et renommez-le en FootStepManager.
- Écrivez le script comme ci-dessous.
- description du script
- Après que le FootStepManager détecte qu'un joueur local est ajouté, il attache le script FootStepController à l'objet GameObject de ZepetoAnimator du joueur.
- FootStepController est responsable de l'ajout d'événements d'animation qui jouent des sons de pas.
- Le script de la fonction exécutée par l'événement d'animation de l'Animator doit être appliqué de manière identique à l'objet auquel le composant Animator correspondant est appliqué.
- Vous devez donc trouver ZepetoAnimator.gameObject et appliquer le script FootStepController en tant qu'AddComponent.
3) Appliquez le son des pas au footStepSound de FootStepManager.
4) Si vous appuyez sur le bouton Play pour l'exécuter, vous pouvez voir que le son est joué en fonction des pas du joueur local chaque fois qu'il marche.
👍 Conseils
- L'état de marche de l'animateur de base ZEPETO se compose de plusieurs mélanges et états d'animation.
- Puisque l'exemple applique le son uniquement à l'état move_walk, vous pouvez personnaliser AddAnimationClipEvent() et l'entrer directement dans des états tels que la marche rapide et la course.
- Lorsque le son est appliqué à plusieurs états d'animation, les sons de pas peuvent se chevaucher en raison du mélange d'animation. Pour résoudre ce problème, écrivez une instruction conditionnelle supplémentaire afin que le son correspondant soit joué lorsque AnimationEvent.animatorClipInfo.weight est 0.5.
❗️ Problème connu
- Lorsqu'il est mis en œuvre selon le style du guide de développement, le message d'erreur suivant peut apparaître, mais il ne devrait y avoir aucun problème d'exécution.