CRÉEZ VOTRE MONDE
Joueurs & Personnages : Avancé

Utilisation d'événements d'animation

15min
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 ajouter des événements à l'animation d'objet 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 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# 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 objectanimationcontroller ts import { zepetoscriptbehaviour } from 'zepeto script' export default class objectanimationcontroller extends zepetoscriptbehaviour { public up() { console log(`cube is up`); } public down(){ console log(`cube is down`); } } 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 jouer des sons de pas en utilisant des événements d'animation sur des personnages locaux 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 footstepcontroller ts import { animationevent, animator, audioclip, audiosource } from 'unityengine'; import { zepetoscriptbehaviour } from 'zepeto script'; export default class footstepcontroller extends zepetoscriptbehaviour { // son utilisé pour les effets de pas public footstepsound audioclip; // source audio pour jouer le son des pas private zepetoaudio audiosource; // ajoute des événements d'animation pour déclencher les sons de pas public addanimationevent() { // obtenir le composant animator attaché à cet objet de jeu const anim = this getcomponent\<animator>(); // vérifier si le composant animator existe if (anim != null) { // créer la source audio pour les sons de pas this setaudio(); // spécifier les moments dans les clips d'animation où les sons de pas doivent jouer const runsoundeventtimes = \[0 1, 0 6]; // ajouter des événements d'animation au clip d'animation spécifié this addanimationclipevent(anim, "move walk", runsoundeventtimes); } } // configure la source audio pour jouer les sons de pas private setaudio() { // créer et configurer le composant audiosource this zepetoaudio = this gameobject addcomponent\<audiosource>(); this zepetoaudio clip = this footstepsound; } // active les sons de pas public activatefootsteps() { // afficher un message dans le journal indiquant que les sons de pas sont en cours de lecture console log("pas !"); // jouer le son des pas en utilisant la source audio configurée this zepetoaudio play(); } // ajoute des événements d'animation à un clip d'animation spécifié private addanimationclipevent(anim animator, clipname string, eventtimes number\[]) { // initialiser l'index du clip d'animation let animationclipindex number; // obtenir tous les clips d'animation du runtimeanimatorcontroller const clips = anim runtimeanimatorcontroller animationclips; // trouver l'index du clip d'animation spécifié for (let i = 0; i < clips length; i++) { if (clips\[i] name == clipname) { animationclipindex = i; } } // itérer à travers les temps d'événements spécifiés eventtimes foreach(eventtime => { // créer un nouvel animationevent pour le déclencheur de son de pas const newevent animationevent = new animationevent(); newevent time = eventtime; newevent functionname = "invoke"; newevent stringparameter = "activatefootsteps"; // ajouter le nouvel animationevent au clip d'animation clips\[animationclipindex] addevent(newevent); }); } } 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 footstepmanager ts import { spawninfo, zepetoplayers } from 'zepeto character controller' import { zepetoscriptbehaviour } from 'zepeto script' import footstepcontroller from ' /footstepcontroller' import { worldservice } from 'zepeto world' import { audioclip } from 'unityengine'; export default class footstepmanager extends zepetoscriptbehaviour { // son à jouer pour les pas public footstepsound audioclip; start() { // écouteur d'événements lorsque le joueur local est ajouté zepetoplayers instance onaddedlocalplayer addlistener(() => { // accéder au personnage zepeto du joueur local const zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; // attacher le script footstepcontroller à l'objet gameobject de zepetoanimator const footstepcontroller = zepetocharacter zepetoanimator gameobject addcomponent\<footstepcontroller>(); // définir le footstepsound pour le footstepcontroller footstepcontroller footstepsound = this footstepsound; // ajouter des événements d'animation pour déclencher les pas footstepcontroller addanimationevent(); }); } } 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