« Attendez, j'ai changé d'avis » – Interruptions de transition de la machine à états

Plongeons donc dans certains détails complexes des transitions et des interruptions des machines à états !
Par défaut dans le système d'animation, les transitions ne peuvent pas être interrompues : une fois que vous commencez à passer d'un état à l'autre, il n'y a pas d'issue. Comme un passager sur un vol transatlantique, vous êtes confortablement installé dans votre siège jusqu'à ce que vous atteigniez votre destination et vous ne pouvez pas changer d'avis. Pour la plupart des utilisateurs, cela convient.
Mais si vous avez besoin de plus de contrôle sur les transitions, Mecanim peut être configuré de différentes manières pour répondre à vos besoins. Si vous n'êtes pas satisfait de votre destination actuelle, vous pouvez prendre le siège du pilote et modifier vos plans à mi-vol. Cela signifie des animations plus réactives, mais aussi de nombreuses possibilités de se perdre dans la complexité.
Voyons donc quelques exemples pour éclaircir ce problème. Nous pouvons commencer avec une machine à états assez simple avec quatre états, étiquetés de A à D, et des déclencheurs connectés à chaque transition sur la machine à états.

Par défaut, lorsque nous déclenchons la transition A->B, notre machine d'état transitionne vers B et rien ne peut l'empêcher d'atteindre sa destination. Mais si nous allons sur l'inspecteur de transition A->B et changeons la source d'interruption de « Aucune » à « État actuel », notre voyage de A à B peut être interrompu par certains déclencheurs sur l'état A.

Pourquoi seulement « certains » ? Parce que la case à cocher « Interruption ordonnée » est également cochée par défaut. Cela signifie que seules les transitions sur l'état A qui ont une priorité plus élevée que celle actuelle sont autorisées. En regardant l’inspecteur de l’état A, nous pouvons voir que cela s’applique uniquement à la transition A->C.

Donc si nous activons le déclencheur A->B, puis peu de temps après le déclencheur A->D, notre transition reste ininterrompue. Cependant, si nous appuyons plutôt sur le déclencheur A->C, la transition est immédiatement interrompue et la machine d'état commence la transition vers C.
En interne, le système d'animation enregistre la pose au moment de l'interruption et va désormais fusionner entre cette pose statique (X) et la nouvelle animation de destination. Pourquoi une pose statique, au lieu d'un mélange éventuellement plus fluide entre les transitions actuelles et nouvelles ? En termes simples : la performance. Lorsqu'un jeu est confronté à une cascade d'interruptions, le suivi de plusieurs transitions dynamiques se déroulant simultanément rendrait rapidement le système d'animation non évolutif.
Maintenant, si nous décochons la case « Interruption ordonnée », alors A->C et A->D peuvent interrompre la transition. Cependant, s'ils sont tous deux déclenchés sur la même image, A->C aura toujours la priorité car il a une priorité plus élevée.
Si nous changeons la source d’interruption sur « État suivant », A->C et A->D ne peuvent plus interrompre la transition, quel que soit leur ordre. Cependant, si nous appuyons sur le déclencheur B->D, nous commencerons immédiatement la transition de A à D, sans terminer la transition vers B.
L’ordre de transition est également important pour l’État B. La case à cocher « Interruption ordonnée » n'est plus disponible (toute transition déclenchée sur B peut interrompre la transition car elles n'ont pas de classement de priorité par rapport à A->B), mais l'ordre des transitions sur B déterminera quelle transition gagne si les deux sont déclenchées dans la même image. Dans ce cas, si B->D et B->C sont déclenchés dans la même image, B->D sera sélectionné.

Enfin, pour un contrôle complet, nous pouvons définir la source d’interruption sur « État actuel puis état suivant » ou « État suivant puis état actuel ». Dans ce cas, les transitions seront analysées indépendamment sur un état, puis sur l'autre.
Alors, supposons que nous ayons la configuration suivante.

Lors de la transition A->B, un joueur très excité déclenche quatre transitions dans la même image : A->C, A->D, B->C et B->D. Ce qui se produit?
Tout d’abord, « Interruption ordonnée » est cochée, nous pouvons donc ignorer immédiatement A->D : sa priorité est inférieure à A->B. L'état actuel est résolu en premier, nous n'avons donc même pas besoin de regarder l'état B pour savoir que la transition A->C gagne.

