Zustandsmaschinen im Graph-Editor

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

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.

  1. Klicken Sie im Graph Editor mit der rechten Maustaste und wählen Sie Node einfügen ⟩ Zustandsmaschine.

    Graph Editor-Kontextmenü mit geöffnetem Untermenü 'Node einfügen' und ausgewählter Zustandsmaschine.
  2. 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.

    Zustandsmaschinenansicht mit der Schaltfläche 'Zustand erstellen' und den Knoten 'Entry' und 'Any'.
  3. 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.

    IdleRunBlend-, Fall- und LandIdle-Knoten, die mit den Eingängen Locomotion, Fall und LandIdle eines Zustandsmaschinennodes verbunden sind, dessen Ausgabe mit Graph Output verbunden ist.
  4. Ö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.

    Entry-Knoten, der mit dem Locomotion-Zustand verbunden ist.
  5. 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.

  6. 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.
    Übergangseinstellungen für LandIdle zu Locomotion, mit Länge auf 0.2, Kurve auf Linear, Warten auf Fertig und Wann auf Vor Fertig.
  7. 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.

  8. 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.

  9. 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
EigenschaftTypBeschreibung
EntryStateObjectValueEin 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.

EigenschaftTypBeschreibung
VonObjectValueEin 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.
ZuObjectValueEin ObjectValue, dessen Value auf die AnimationNodeDefinition für den Zielzustand zeigt.
WaitForEnum.AnimationNodeWaitForBestimmt, welche Übergangsbedingungs-UI angezeigt wird. Enum.AnimationNodeWaitFor|Trigger zeigt das Expression-Feld an. Enum.AnimationNodeWaitFor|Finished zeigt das Wann-Dropdown an.
WannEnum.AnimationNodeTransitionWhenVerfü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.
ExpressionStringVerfü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ätNummerDie 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.
DauerNummerDie Zeit in Sekunden, um in den Zielzustand zu mischen. Der Standardwert beträgt 0,15 Sekunden.
KurveEnum.PoseEasingStyleDie Easing, die während der Mischung verwendet wird. Nur Linear und CubicV2 werden unterstützt. Der Standardwert ist Linear.
©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.