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

All of the states for Henry’s left hand. Each layer has a purpose and a clear hierarchy. It makes it easy to control and easy to find state.

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

State machine behaviors are bits of code that you can attach to any animation state. You use them to tie behavior directly to the state of the animator itself.

Avoid writing complex gameplay code inside of them because it can get difficult to track down where your changes in the state are coming from. If you are using state machine behavior to drive gameplay code, use a messaging system; talk to a manager class, or trigger your code off of parameters at a higher level.

Finally, my favorite state machine behavior: Debug.Break();. It’s the most useful state machine behavior; you can attach anywhere in your animation setup, and you’ll have a breakpoint, similar to that of a visual scripting system.

Don’t be afraid to use C# code where appropriate. Rather than have hundreds or thousands of transitions, or hooking up AnyState transitions all over the place, use Animator.Play or Animator.CrossFade to dynamically cause direct transitions from code. If that still isn’t enough control, you can look into our PlayablesAPI for even more ways to animate using code. Examples can be found at 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
Compris

Ce site utilise des cookies dans le but de vous offrir la meilleure expérience possible. Consultez la page de politique des cookies pour en savoir plus.