Cherchez Unity

Cinq astuces pour des commandes d'animation simples et efficaces

Last updated: December 2018

What you will get from this page: Will Armstrong’s five awesome tips for animator controllers. You’ll get tips for building animator controllers for your characters like you would a script: so they’re efficient to reuse, extend, support and debug, all the way through the development cycle.
All of the screenshots are from animation for the character Henry in Firewatch.

Masquez la complexité des structures

Les arbres d'animation permettent de masquer la complexité. Un arbre d'animation n'a pas d'état, il s'insère simplement entre les différents clips en fonction des paramètres que vous définissez.

Cela signifie que vous pouvez itérer entre les arbres d'animation sans craindre d'affecter le reste de votre jeu. Vous pouvez masquer un réseau d'états complexe et éviter les erreurs, car vous ne pouvez pas lier le comportement à la plupart des animations d'un arbre d'animation.

unity-tidy-animators-locomotion-blend-tree

Cela semble complexe, mais cet arbre d'animation a réellement permis de faire avancer les choses.

Quand vous pensez « couches », pensez « classe de scripts »

C'est utile de considérer les couches comme une sorte d'analogie à une classe dans un script. Vous voulez que chaque élément d'une couche serve la même logique et la même fonction comportementale. Car chaque couche commande les couches inférieures, qu'elle affecte le cœur de la structure ou non, qu'elle soit additive ou non, etc.

unity-tidy-animators-states

Tous les états pour la main gauche d'Henry. Chaque couche a un objectif et une hiérarchie claire. L'état est ainsi plus facile à contrôler et à trouver.

Réutilisez les schémas

Les schémas réutilisables et logiques dans les machines à état et à sous-état accélèrent le développement, permettent à plusieurs personnes de créer des contenus similaires, simplifient les corrections et réduisent les erreurs de manière générale.

Quelques exemples de schémas efficaces pour structurer vos couches :

  • Hub and spoke : ce schéma simplifie la correction car il permet de voir clairement les transitions disparaître et revenir dans l'état vide. Caque branche du réseau doit réinitialiser tout état qu'elle touche. Ces branches sont facilement transformables en machines à sous-état grâce au schéma ci-dessous.

    unity-tidy-animators-hub-and-spoke

    Un schéma Hub and spoke utilisé pour animer la main droite d'Henry.

  • Entrée/sortie partagée : en groupant les états dans un schéma ‘intro’ - ‘execution / loop’ - ‘outro’, vous pouvez attacher vos évènements d'animation ou comportements de machine à état aux états ‘intro’ et ‘outro’. Comme pour un arbre d'animation, vous pouvez itérer et modifier les états ‘execution / loop’ sans craindre d'affecter tout votre jeu.

    unity-tidy-animators-entry-to-exit

    Entrée à sortie : tous les états de la main droite d'Henry pour tenir un livre ; plus de sous-états pour masquer les détails sous-jacents.

  • La section critique et l'animation secondaire : pour des animation interruptibles, surtout pour les animations induites par le jouer, divisez votre clip en deux parties. Tout d'abord une section critique qui inclut tous les changements d'état, les effets, les dommages, etc. qui doivent toujours êtres lus intégralement, puis une animation secondaire qui peut être interrompue par une nouvelle entrée.

    unity-tidy-animators-critical-section-and-settle

    Une fois que vos animations sont fonctionnelles et correspondent au résultat recherché, vous devez reporter l'état de vos animateurs dans l'état de votre jeu. Voici quelques éléments à garder à l'esprit pour ce faire.

N'écrivez pas de code complexe dans les comportements de machines à état

Les comportements de machine à états sont des portions de code que vous attachez à n'importe quel état d'animation. Ils vous permettent de lier directement un comportement à l'état de l'animateur lui-même.

Évitez d'y écrire du code de gameplay trop complexe, car vous pourriez avoir du mal à identifier la source des changements de l'état. Si vous utilisez le comportement de machine à états pour le code du jeu, utilisez un système de messagerie : parlez à un manager ou déclenchez votre code de paramètres à un niveau supérieur.

Enfin, mon comportement de machine à états préféré : Debug.Break();. C'est le plus utile. Il vous permet d'attacher des éléments à n'importe quel endroit de l'animation et vous bénéficierez d'un breakpoint, comme pour un système de script visuel.

N'ayez pas peur d'utiliser du code C# si nécessaire. Plutôt que d'avoir des centaines ou des milliers de transitions, ou d'utiliser des transitions AnyState un peu partout, utilisez Animator.Play ou Animator.CrossFade pour provoquer dynamiquement des transitions directes à partir du code. Si ça ne suffit pas, jetez un œil à nos API jouables pour trouver d'autres techniques pour animer avec le code. Vous trouverez des exemples sur https://docs.unity3d.com/Manual/Playables-Examples.html.

Utilisez les comportements de machine à état pour vous assurer qu'un évènement d'animation est fonctionnel en permanence

Les évènements d'animation lie un moment spécifique de votre clip à un changement spécifique d'état dans votre jeu ; ils permettent notamment d'adapter les effets sonores et visuels. Mais si vous quittez un clip avant le lancement de l'évènement, alors celui-ci ne s'activera jamais. Pour résoudre ce problème, ajoutez un comportement de machine à état qui garantit le lancement systématique de l'évènement lorsqu'un certain point du jeu est atteint.

unity-tidy-animators-state-machine

Plus de ressources

Dites-nous si vous avez aimé ce contenu !

Oui, continuez comme ça Ça pourrait être mieux