HeadlinesBriefing favicon HeadlinesBriefing.com

Bevy-Animationsleitfaden: Player und Graph

Hacker News •
×

Sie haben also gerade eine animierte 3D-Charakter-.glb-Datei von einer Website mit kostenlosen Assets heruntergeladen. Sie haben eine grundlegende Bevy-Anwendung am Laufen. Jetzt möchten Sie Ihren Charakter in Ihrer Bevy-App spawnen. Einfach genug, es gibt wahrscheinlich eine Funktion dafür. Sie schlagen das grundlegende Animated-Mesh-Beispiel auf Bevys Website nach... und es wird schnell offensichtlich, dass die Dinge nicht so einfach sind, wie Sie gehofft haben. Es gibt viel einzurichten, animationsbezogene Typen, deren genauer Zweck nicht offensichtlich ist... Sie könnten in der Lage sein, die Beispiele ziemlich schnell an Ihre Bedürfnisse anzupassen, aber tatsächlich ein mentales Modell davon zu bilden, wie Animation in Bevy funktioniert, basierend auf den Beispielen, wird ernsthaftes Nachdenken erfordern.

Dieser Beitrag ist das, was ich mir gewünscht hätte, als ich vor ein paar Wochen versucht habe, Animation in Bevy zu verstehen. Ich beginne damit, Schritt für Schritt ein ausreichendes mentales Modell aufzubauen, um mit grundlegender Animation in Bevy umzugehen. Dann führe ich Sie durch das offizielle Beispiel, erkläre, wie es sich auf dieses mentale Modell bezieht, und halte auch ein wenig Ihre Hand, wenn Sie auf Methoden stoßen, die Sie vielleicht noch nicht kennengelernt haben. Wenn Sie mit den Grundlagen von Bevs ECS vertraut sind, sind Sie die Zielgruppe dieses Beitrags.

Erste Intuition: Lassen Sie uns für eine Sekunde Bevy und ECS vergessen und (sehr abstrakt) darüber nachdenken, was es braucht, um ein animiertes 3D-Modell zu bewegen. Sie brauchen zwei Zutaten: Ein gespawntes 3D-Modell (oder eine Art Referenz darauf), Eine Animation, die abgespielt werden soll (oder eine Art Referenz darauf). Zunächst erwarten Sie vielleicht, eine Animation so abzuspielen: my_model.play_animation(my_animation); Hier ist unser mentales Modell bisher: Nun, das ist tatsächlich etwas nahe an der Art, wie eine echte Bevy-Funktion funktioniert, nämlich die play-Methode vom Typ AnimationPlayer... oder zumindest wäre es das, wenn sein self tatsächlich auf ein 3D-Modell verweisen würde und sein animation-Argument tatsächlich auf eine Animation. Im Moment ist jedoch nicht klar, dass sie das tun. Aber schauen wir uns genauer an, wie unsere beiden Zutaten in Bevy dargestellt werden, und vielleicht können wir unsere Intuition mit der Funktionsweise der play-Funktion in Einklang bringen.

AnimationPlayer: Eine Möglichkeit, die Animationen eines 3D-Modells zu steuern. Angenommen, Sie spawnen ein 3D-Modell aus einer .glb-Datei. Idealerweise möchten Sie es mit der ID der gespawnten Entität referenzieren, außer dass 3D-Modelle im Allgemeinen nicht als einzelne Entität gespawnt werden, sondern als Hierarchie von Entitäten: Um Ihr Modell zu animieren, müssen Sie es auf andere Weise referenzieren. Bevy hat einen Mechanismus, genau das zu tun — ein 3D-Modell für Animation zu referenzieren — in Form des Typs AnimationPlayer. AnimationPlayer ist eine Komponente, die automatisch in eine Entität eingefügt wird... irgendwo in der Entitätshierarchie, die einem animierbaren 3D-Modell entspricht, wenn dieses Modell gespawnt wird. Sobald Sie einen AnimationPlayer erhalten haben, können Sie ihm sagen, eine Animation abzuspielen/zu pausieren, auf die aktuell abgespielte zuzugreifen... aber das setzt voraus, dass Sie überhaupt Animationen haben! Konzentrieren wir uns jetzt darauf.

AnimationGraph: Eine Möglichkeit, Animationen zu speichern und zu kombinieren. Die Art, wie Animationen in Bevy dargestellt werden, ist etwas komplex, weil Sie im Allgemeinen nicht einzelne Animationen manipulieren, sondern Instanzen einer Datenstruktur, die mehrere Animationen gleichzeitig speichern und miteinander kombinieren kann. Diese Struktur ist der AnimationGraph. Ich werde hier nicht auf die Details der Verwendung von AnimationGraphs eingehen; sobald Sie sich mit einfachen Animationen wohlfühlen, können Sie mehr über allgemeine Animationsgraphen mit dem AnimationGraph-Beispiel lernen. Für jetzt konzentrieren wir uns auf Fälle, in denen unser Graph nur eine Animation enthält, die uns interessiert. In diesen Fällen sind die Daten, die Ihre Animation identifizieren: (Eine Referenz auf) einen AnimationGraph, Ein Identifikator dafür, wo Ihre Animation tatsächlich im Graphen sitzt — dafür ist der Typ NodeIndex da.

Alles zusammenfügen: Okay, sagen wir, Sie haben einen AnimationPlayer sowie einen AnimationGraph und einen NodeIndex. So verbinden Sie sie, um Ihre Animation abzuspielen: Fügen Sie eine Referenz auf .... ein.