Créez des contrôleurs d'animateur pour vos personnages comme vous le feriez pour un script, de manière à ce qu'ils soient suffisamment simples pour être réutilisés, pris en charge et débogués tout au long du cycle de développement.
Toutes les captures d'écran ci-dessous proviennent de l'animation du personnage Henry dans Firewatch de Campo Santo.
Les arbres de mélange sont parfaits pour dissimuler la complexité. Un arbre de mélange n'a pas d'état puisqu'il ne rappelle pas le code. Il mélange les différents clips en fonction des paramètres que vous définissez.
Cela signifie que vous pouvez itérer sur les Blend Trees sans craindre de casser le reste de votre jeu. Vous pouvez cacher un réseau complexe d'états et éviter les bogues en cours de route parce que vous ne pouvez pas lier le comportement à la plupart des animations dans un arbre Blend.
Il est utile de considérer les calques comme une classe dans un script. Vous voulez que tous les éléments d'une couche remplissent la même fonction logique et comportementale. En effet, chaque couche individuelle contrôle les autres couches qu'elle remplace - si elle affecte ou non certains os, si cette couche est additive, etc.
Les modèles logiques réutilisables dans les machines à états et à sous-états accélèrent le développement, facilitent le débogage et peuvent réduire les bogues, tout en permettant à plusieurs personnes de produire un contenu similaire.
Les sections suivantes présentent des modèles utiles pour structurer vos couches.
Ce modèle facilite le débogage, car il est possible de voir clairement les transitions sortir et revenir à l'état vide. Chaque rayon du moyeu doit réinitialiser tout état qu'il touche.
Les spokes sont de bons candidats pour la fabrication de machines de second rang en utilisant les modèles suivants.
En regroupant les états selon un schéma "intro" - exécution/boucle - "outro", vous pouvez attacher proprement les événements d'animation ou les comportements de la machine d'état aux états intro et outro. À l'instar d'un arbre Blend, vous pouvez itérer et modifier les états internes de l'exécution/de la boucle sans craindre de casser votre jeu.
Pour les animations susceptibles d'être interrompues, en particulier les animations pilotées par les entrées du lecteur, divisez votre clip en deux parties. Tout d'abord, maintenez une section critique qui contient tous les changements d'état, les effets et les dommages qui doivent toujours être exécutés jusqu'au bout. Deuxièmement, concevez une animation de décompte qui soit agréable à regarder pour revenir au ralenti et qui puisse être interrompue par une nouvelle entrée.
Une fois que vos animations se comportent et apparaissent comme vous le souhaitez, vous devez répercuter l'état de vos animateurs dans l'état de votre jeu. Les sections suivantes présentent quelques points clés à garder à l'esprit.
Les comportements de la machine à états sont des bouts de code que vous pouvez attacher à n'importe quel état de l'animation. Utilisez-les pour lier les comportements directement à l'état de l'animateur lui-même.
Évitez d'écrire un code de gameplay complexe à l'intérieur de ces systèmes, car il peut être difficile de savoir d'où viennent les modifications de l'état. Si vous utilisez le comportement de la machine à états pour piloter le code de gameplay, tirez parti d'un système de messagerie, communiquez avec une classe gestionnaire ou déclenchez votre code à partir de paramètres à un niveau plus élevé.
Debug.Break() est l'un des comportements de machine à états les plus efficaces que vous puissiez utiliser. Fixez-le n'importe où dans votre configuration d'animation et vous aurez un point d'arrêt similaire à celui d'un système de script visuel.
Utiliser le code C# le cas échéant. Plutôt que de gérer des centaines ou des milliers de transitions, ou d'accrocher des transitions AnyState un peu partout, utilisez Animator.Play ou Animator.CrossFade pour créer dynamiquement des transitions directes à partir du code. Si vous n'avez pas encore assez de contrôle, consultez l'API Playables d'Unity pour trouver d'autres moyens d'animer à l'aide du code. Quelques exemples peuvent être trouvés ici.
Les événements d'animation relient un moment précis de votre clip d'animation à un changement d'état spécifique dans votre jeu. Ils peuvent être utilisés pour mettre en valeur des éléments tels que des effets visuels et sonores. Cependant, si vous sortez d'un chargeur avant qu'il n'ait été utilisé, il ne sera jamais utilisé. Une façon de résoudre ce problème est d'ajouter un comportement de machine à états qui garantit que l'événement se déclenche toujours lorsqu'un moment précis est atteint, quoi qu'il se passe (ou ne se passe pas) dans le jeu.