Eine Zustandsmaschine kombiniert Animationsknoten in benannte Zustände, wie Idle, Walk, Run und Jump. Sie spielt den aktiven Zustand und mischt zu einem anderen Zustand, wenn eine Übergangsbedingung auf true evaluiert wird. Verwenden Sie eine Zustandsmaschine, um zu definieren, welche Animationen einander folgen können, ohne Übergangslogik in Luau zu schreiben.
Jeder Zustand verbindet sich mit einem Eingang der Zustandsmaschine. Ein Zustand kann ein Clip, ein Mischknoten oder eine andere Zustandsmaschine sein. Die Zustandsmaschine gibt die aktive Animationspose oder eine Mischung zwischen zwei Posen aus, wenn ein Übergang stattfindet, die Sie mit dem nächsten Knoten im Graph verbinden.
Voraussetzungen
Bevor Sie eine Zustandsmaschine erstellen, machen Sie sich mit dem Animation Graph Editor vertraut, einschließlich wie Sie ihn öffnen und ein Animationsgraph erstellen.
Erstellen einer Zustandsmaschine
Das folgende Beispiel verwendet drei Zustände aus JumpFallLandRunExample: Locomotion, Fall und LandIdle. Der Charakter bewegt sich normal, wechselt zu einer fallenden Animation, wenn er in der Luft ist, und spielt eine Landungsanimation, bevor er zur Fortbewegung zurückkehrt. Diese Schritte konzentrieren sich auf die Zustandsmaschine; beginnen Sie mit Animationsknoten für Fortbewegung, Fallen und Landen.
Klicken Sie im Graph Editor mit der rechten Maustaste und wählen Sie Node einfügen ⟩ Zustandsmaschine.

Klicken Sie auf dem Zustandsmaschinennode auf Öffnen. Verwenden Sie im Zustandsmaschinen-Bereich Zustand erstellen, um drei Zustände mit den Namen Locomotion, Fall und LandIdle hinzuzufügen.

Klicken Sie auf Zurück zum Graph und verbinden Sie Ihre Animationsknoten mit den entsprechenden Eingängen der Zustandsmaschine:
- Locomotion: Verbinden Sie Ihre Fortbewegungsanimation. Der Referenzgraph verwendet einen Blend1DNode namens IdleRunBlend, um Idle- und Laufanimationen basierend auf Speed zu mischen.
- Fall: Verbinden Sie einen fallenden ClipNode und setzen Sie Wiedergabemodus auf Enum.AnimationNodePlayMode|OnceAndHold, damit er seine endgültige Pose hält, bis der Charakter landet.
- LandIdle: Verbinden Sie einen Landungsclip und setzen Sie Wiedergabemodus auf Enum.AnimationNodePlayMode|OnceAndHold, damit er fertig wird und zurück zur Fortbewegung übergeht.
Verbinden Sie die Ausgabe der Zustandsmaschine mit dem Pose-Eingang von Graph Output.

Öffnen Sie die Zustandsmaschine-Ansicht erneut und ziehen Sie einen Übergang von (Entry) zu Locomotion. Die Zustandsmaschine beginnt in diesem Zustand, wenn der Graph startet.

Fügen Sie einen booleschen Graphparameter mit dem Namen Grounded hinzu und setzen Sie ihn auf true. Dieser Parameter zeigt an, ob sich der Charakter am Boden befindet.
Fügen Sie die folgenden Übergänge hinzu, indem Sie eine Verbindung vom Quellzustand zum Zielzustand ziehen, und konfigurieren Sie jeden Übergang:
- Locomotion zu Fall: Setzen Sie Warten auf auf Expression, Expression auf not Grounded und Länge auf 0.2 Sekunden. Die fallende Animation beginnt, wenn der Charakter den Boden verlässt.
- Fall zu LandIdle: Setzen Sie Warten auf auf Expression, Expression auf Grounded und Länge auf 0.1 Sekunden. Die Landungsanimation beginnt, wenn der Charakter den Boden berührt.
- LandIdle zu Locomotion: Setzen Sie Warten auf auf Fertig, Wann auf Enum.AnimationNodeTransitionWhen|BeforeFinished und Länge auf 0.2 Sekunden. Die Zustandsmaschine beginnt, während der letzten 0.2 Sekunden der Landungsanimation zurück zur Fortbewegung zu mischen.

Lassen Sie Kurve für alle drei Übergänge auf dem Standardwert (Linear) stehen. Vorschau des Graphen und ändern Sie Grounded auf false, um in Fall zu gelangen, und dann zurück auf true, um LandIdle abzuspielen und zu Locomotion zurückzukehren.
Aktualisieren Sie Grounded aus Ihrem Gameplay-Code, während der Charakter den Boden verlässt und berührt. Wenn Ihre Fortbewegungsmischung Speed verwendet, aktualisieren Sie diesen Parameter, während sich der Charakter bewegt. Für den Parameter-Workflow siehe API-Integration.
Erweitern Sie die Zustandsmaschine um Sprünge und zusätzliche Landungszustände, um den vollständigen Bewegungsgraph zu erstellen. JumpFallLandRunExample enthält separate Sprünge für Stehen und Laufen sowie unterschiedliche Landungen basierend auf Bewegung und Fallgeschwindigkeit.
Eigenschaften der Zustandsmaschine
Eigenschaften des Zustandsmaschinenknotens
- Eingänge
- State1...StateN: Die Animationsknoten, die jeden Zustand definieren. Der Name des Zustands muss mit dem Namen des Eingangs zum Zustandsmaschinennode übereinstimmen.
- Eigenschaften
Eigenschaft Typ Beschreibung EntryState ObjectValue Ein ObjectValue, dessen Value auf die AnimationNodeDefinition für den Zustand zeigt, der aktiv ist, wenn der Graph startet. - Ereignisdaten
- Ereignisbehandlung: Ereignisse aus dem aktiven Zustand passieren mit ihrem Gewicht unverändert.
- Ereignisübertragung: Überträgt Ereignisse nur aus dem aktiven Zustand. Während eines Übergangs folgt die Ereignisübertragung den globalen Ereignisregeln.
Übergangseigenschaften
Ein Übergang hat einen oder mehrere Quellzustände, einen Zielzustand und eine Bedingung. Wenn der aktive Zustand mit einem Quellzustand übereinstimmt, überprüft die Zustandsmaschine die Bedingung. Sie mischt zum Zielzustand, wenn die Bedingung auf true evaluiert wird.
Warten auf bestimmt die Übergangsbedingungs-UI. Wählen Sie Expression (Enum.AnimationNodeWaitFor|Trigger), um ein Expression-Feld anzuzeigen. Eine Expression kann direkt auf einen booleschen Graphparameter verweisen, wie ShouldJump, oder eine Bedingung auswerten, wie Speed >= 12. Wählen Sie Fertig (Enum.AnimationNodeWaitFor|Finished), um das Wann-Dropdown anzuzeigen.
Wenn mehr als ein Übergang eine wahre Expression hat, bewertet die Zustandsmaschine den Übergang mit dem höchsten Prioritätswert zuerst. Wenn die Prioritäten gleich sind, wählt sie einen Übergang zufällig aus. Weisen Sie konkurrierenden Übergängen unterschiedliche Prioritäten zu, um das Ergebnis vorhersehbar zu machen.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
| Von | ObjectValue | Ein ObjectValue, dessen Value auf die AnimationNodeDefinition für den Zustand zeigt, der den Übergang beginnen kann. Lassen Sie diese Eigenschaft für einen (Any)-Übergang ungesetzt. |
| Zu | ObjectValue | Ein ObjectValue, dessen Value auf die AnimationNodeDefinition für den Zielzustand zeigt. |
| WaitFor | Enum.AnimationNodeWaitFor | Bestimmt, welche Übergangsbedingungs-UI angezeigt wird. Enum.AnimationNodeWaitFor|Trigger zeigt das Expression-Feld an. Enum.AnimationNodeWaitFor|Finished zeigt das Wann-Dropdown an. |
| Wann | Enum.AnimationNodeTransitionWhen | Verfügbar, wenn Warten auf Fertig ist. Wählen Sie Enum.AnimationNodeTransitionWhen|Finished, um nach Abschluss des Quellzustands zu beginnen, oder Enum.AnimationNodeTransitionWhen|BeforeFinished, um einen Dauer vor Abschluss des Quellzustands zu beginnen. |
| Expression | String | Verfügbar, wenn Warten auf Expression ist. Ein boolescher Graphparameter oder eine Expression, die, wenn sie auf true evaluiert wird, den Übergang beginnt. Siehe Expression für unterstützte Elemente. |
| Priorität | Nummer | Die Reihenfolge, die verwendet wird, wenn mehr als eine Expression wahr ist. Höhere Werte haben Vorrang. Gültige Werte reichen von 0 bis 65.535. |
| Dauer | Nummer | Die Zeit in Sekunden, um in den Zielzustand zu mischen. Der Standardwert beträgt 0,15 Sekunden. |
| Kurve | Enum.PoseEasingStyle | Die Easing, die während der Mischung verwendet wird. Nur Linear und CubicV2 werden unterstützt. Der Standardwert ist Linear. |