Comment éviter les spaghettis dans l'animateur?

9

Je travaille avec des animations dans Unity et jusqu'à présent, je n'en ai créé que quatre (haut bas gauche et droite) et ma fenêtre d'animation semble suivre ... entrez la description de l'image ici

Le problème est que si je bougeais vers le haut, je veux que le héros continue de regarder vers le haut et non vers le `` ralenti neutre '' (ou comme il a commencé), mais cela signifie que j'ai 4 positions de ralenti ... et chacun d'eux peut passer en haut, en bas , Gauche ou Droite et ils vont exponentiellement à chaque action supplémentaire ...

Ce qui me donne l'impression de faire quelque chose de mal ...

Existe-t-il un meilleur moyen de faire des transitions entre différentes actions?

Matas Vaitkevicius
la source
J'essaie de faire ça depuis longtemps. Malheureusement, ma conclusion est que vous ne pouvez pas. L'animateur se transforme TOUJOURS en une toile de spaghettis et nous devons vivre avec. Jetez un coup d'œil à cette vidéo, elle aide youtube.com/…
Nevermind

Réponses:

9

Vous pouvez résoudre ce type de problème avec BlendTrees (en général, son idée judicieuse de s'appuyer souvent sur des arbres de mélange). L'arbre de fusion est une sorte d'état multi-animation qui, sur la base d'un ou de plusieurs paramètres (flottants), décide laquelle des animations qu'il contient être actuellement active (ou bien l'animation résultante peut être un mélange de plusieurs animations). Même lorsque les animations ne sont pas mélangées, mais échangées, l'échange se produit au milieu de l'animation (c'est-à-dire que si l'animation "sortant" est à 35%, la nouvelle est jouée à partir de 35%). De "l'extérieur", tout cela est caché comme s'il s'agissait d'un état simple / unique.

Par exemple, vous avez un arbre de mélange avec 8 animations de sprites (inactif avec 4 directions principales et 4 diagonales). Il y a 2 paramètres dans cet arbre de mélange - "horizontal" et "vertical". Et sur la base de ces 2 paramètres, l'arbre de fusion décidera de l'animation à jouer. En fonction du paramètre "horizontal", l'arbre de fusion choisira entre l'animation gauche / droite et le paramètre "vertical" décidera de l'animation haut / bas. Ensuite, une fois combinés, vous aurez les 8 animations avec des diagonales (c'est la même idée que derrière les joypads / joysticks).

entrez la description de l'image ici

C'est un peu déroutant donc, même si StackExchange n'aime pas les liens, je vais lier un court exemple de vidéo que j'ai fait. Remarquez la partie supérieure droite de l'écran. Les points gris sont les "états" / animations et l'actif est celui qui se ferme au point rouge. Comme dit au début, il peut être encore plus complexe et chaque animation d'avoir une influence / force basée sur sa distance au point rouge, résultant en un mélange entre plusieurs animations.

De l'extérieur, son seul état (arbre de mélange) et lorsque vous appliquez le même concept pour marcher et attaquer, vous n'aurez que 3 états liés.

Les arbres de mélange sont créés avec un clic droit sur une zone d'animateur vide Créer un état -> À partir d'un nouvel arbre de mélange. De là, tout est dans l'inspecteur. L'arbre de mélange étant sélectionné, vous pouvez choisir le type d'arbre de mélange (1D, 2D, etc.), ajouter des animations, les positionner (par rapport aux valeurs des paramètres) et sélectionner les paramètres de contrôle.

Si vous souhaitez plus d'informations sur Blend Trees, voici les vidéos d'Unity - Unite 2016 et des didacticiels Unity .

Nikaas
la source
2

Le problème ici est que vous essayez de tout lier ensemble au lieu d'utiliser un déclencheur pour basculer entre les inactifs. Vous devez sélectionner l'animation inactive à l'aide d'un type conditionnel if-else ou switch-case. J'ai fait un diagramme qui semble beaucoup plus net (supposons que l'un d'eux soit le cas par défaut):

entrez la description de l'image ici

Information additionnelle:

Jetez un coup d'œil aux paramètres d'animation sur la façon de définir les paramètres que l'animateur doit reconnaître, les machines d'état pour combiner les animations, les comportements de la machine d'état pour vérifier les variables que vous avez définies.

John Hamilton
la source
Salut John, mais comment dois-je le faire? Pourquoi devrais-je utiliser le déclencheur pour basculer entre les inactifs ou basculer entre les inactifs? comment choisir l'animation inactive en utilisant sinon? Aussi dans le diagramme pourquoi je passerais à idleleft puis à gauche et non à gauche et irais dans idleleft en attendant la prochaine action, ou cela devrait être l'inverse?
Matas Vaitkevicius
@MatasVaitkevicius Vous pouvez définir et vérifier des variables à la fin ou au début des animations. Vous pouvez créer une animation vide qui ne fait que vérifier la casse, puis la rediriger vers la partie suivante ou en faire une couche d'abstraction. J'ai inclus quelques liens vers les manuels pour plus d'informations.
John Hamilton
Alors, comment puis-je faire sinon avec des paramètres qui changeraient les transitions? Il n'y a pas d'exemple, tous les mécanismes que vous avez liés font simplement la transition manuelle comme je l'ai fait dans la question ....
Matas Vaitkevicius
@MatasVaitkevicius Vous devriez vraiment chercher un peu en premier: gamedev.stackexchange.com/questions/103611/…
John Hamilton
Mais c'est comme ça que je l'ai fait. déclencher des incendies de sur action et démarre l'animation puis il passe au ralenti pour cette direction ... Maintenant ce que vous dites (si je vous comprends bien) que je pourrais après l'animation au lieu d'aller au ralenti pour cette direction aller au mécanisme de commutation qui choisirait le ralenti approprié pour moi ... mais je n'ai vu aucun tel mécanisme nulle part, pourriez-vous le copier dans votre réponse s'il vous plaît ....
Matas Vaitkevicius