HeadlinesBriefing favicon HeadlinesBriefing.com

Guide d'animation Bevy : lecteur et graphique

Hacker News •
×

Donc, vous venez de télécharger un fichier .glb de personnage 3D animé sur un site d'actifs gratuits. Vous avez une application Bevy de base en cours d'exécution. Maintenant, vous voulez faire apparaître votre personnage dans votre application Bevy. Assez facile, il y a probablement une fonction pour cela. Vous recherchez l'exemple de base Animated Mesh sur le site Web de Bevy... et il devient rapidement évident que les choses ne sont pas aussi simples que vous l'espériez. Il y a beaucoup de configuration, des types liés à l'animation dont le but exact n'est pas évident... Vous pourriez être en mesure d'adapter les exemples à vos besoins assez rapidement, mais former un modèle mental de la façon dont l'animation fonctionne dans Bevy, basé sur les exemples, va nécessiter une réflexion sérieuse.

Cet article est ce que j'aurais aimé avoir lorsque j'essayais de comprendre l'animation dans Bevy il y a quelques semaines. Je commence par construire, étape par étape, un modèle mental suffisant pour traiter l'animation de base dans Bevy. Ensuite, je vous guide à travers l'exemple officiel, expliquant comment il se rapporte à ce modèle mental, et aussi en vous tenant un peu la main lorsque vous rencontrez des méthodes que vous n'avez peut-être pas encore rencontrées. Si vous êtes à l'aise avec les bases de l'ECS de Bevy, vous êtes le public cible de cet article.

Première intuition : Oublions Bevy et ECS une seconde, et pensons (très abstraitement) à ce qu'il faut pour faire bouger un modèle 3D animé. Vous avez besoin de deux ingrédients : Un modèle 3D généré (ou une sorte de référence à celui-ci), Une animation à jouer (ou une sorte de référence à celle-ci). Donc au début, la façon dont vous pourriez vous attendre à jouer une animation est quelque chose comme : my_model.play_animation(my_animation); Voici notre modèle mental jusqu'à présent : Maintenant, cela est en fait un peu proche de la façon dont une fonction réelle de Bevy fonctionne, à savoir la méthode play du type AnimationPlayer... ou du moins ce serait le cas, si son self se référait réellement à un modèle 3D, et son argument animation se référait réellement à une animation. Pour l'instant, cependant, il n'est pas clair qu'ils le fassent. Mais regardons plus en détail la façon dont nos deux ingrédients sont représentés dans Bevy, et peut-être pouvons-nous réconcilier notre intuition avec la façon dont la fonction play fonctionne.

AnimationPlayer : Un moyen de contrôler les animations d'un modèle 3D. Disons que vous générez un modèle 3D à partir d'un fichier .glb. Idéalement, vous aimeriez y faire référence en utilisant l'ID de l'entité générée, sauf que les modèles 3D ne sont généralement pas générés comme une seule entité, mais plutôt comme une hiérarchie d'entités : Pour animer votre modèle, vous devez y faire référence d'une autre manière. Bevy a un mécanisme pour faire exactement cela — se référer à un modèle 3D pour l'animation — sous la forme du type AnimationPlayer. AnimationPlayer est un composant qui est automatiquement inséré dans une entité... quelque part dans la hiérarchie d'entités correspondant à un modèle 3D animable, lorsque ce modèle est généré. Une fois que vous avez obtenu un AnimationPlayer, vous pouvez lui dire de jouer/mettre en pause une animation, accéder à celle en cours de lecture... mais cela suppose que vous avez des animations en premier lieu ! Concentrons-nous sur celles-ci maintenant.

AnimationGraph : Un moyen de stocker et de combiner des animations. La façon dont les animations sont représentées dans Bevy est un peu complexe, car ce que vous manipulerez généralement ne sont pas des animations individuelles, mais des instances d'une structure de données capable de stocker plusieurs animations à la fois et de les combiner entre elles. Cette structure est l'AnimationGraph. Je n'entrerai pas dans les détails de la façon dont les AnimationGraphs sont utilisés ici ; une fois que vous êtes à l'aise avec les animations simples, vous pouvez en apprendre plus sur les graphiques d'animation généraux avec l'exemple AnimationGraph. Pour l'instant, nous nous concentrerons sur les cas où notre graphique ne contient qu'une seule animation qui nous intéresse. Dans ces cas, les données qui identifient votre animation seront : (Une référence à) un AnimationGraph, Un identifiant pour l'endroit où votre animation se trouve réellement dans le graphique — c'est à cela que sert le type NodeIndex.

Assemblage : Ok, disons que vous avez un AnimationPlayer, ainsi qu'un AnimationGraph et un NodeIndex. Voici comment vous les connectez pour jouer votre animation : Insérez une référence à ....