Der Animationsgraph-Editor ist ein visuelles, node-basiertes Tool, das technischen Künstlern und Animatoren ermöglicht, komplexe Animationslogik direkt innerhalb von Roblox Studio zu erstellen. Durch die Bereitstellung einer optimierten Benutzeroberfläche zur Erstellung von Verhaltensweisen wie Blendbäumen wird die traditionelle Abhängigkeit von manueller Skripterstellung für die Charakterbewegung beseitigt.
Dieses System arbeitet Hand in Hand mit Ihrem bestehenden Animationsworkflow:
- Animationseditor: Verwenden Sie weiterhin den Animationseditor als Ihr primäres Tool zum Erstellen einzelner Clips und zum Feinabstimmen von Keyframes und Kurven.
- Animationsgraph-Editor: Verwenden Sie dieses Tool, um diese Clips zu nehmen und sie in einen Logikbaum zu organisieren, um anspruchsvolles Gameplay-Verhalten zu steuern.
Entwickelt, um die Zusammenarbeit zu verbessern, ermöglicht der visuelle Graph Entwicklern, die von Animatoren erstellte Logik schnell zu inspizieren, zu debuggen und zu verstehen. Während sich Künstler auf die Verfeinerung interaktiver Bewegungen konzentrieren, können Entwickler weiterhin programmgesteuert auf Animationsgraphknoten zugreifen, um direkte Kontrolle über gemischte Animationen und Zustände zu haben.
Erstellen eines Graphen
Um mit dem Erstellen von Logik für einen animierbaren Charakter zu beginnen, greifen Sie über die Registerkarte Avatar im Studio-Ribbon auf den Animationsgraph-Editor zu. Die folgenden Schritte zeigen, wie Sie ein Rig initialisieren und ein grundlegendes Knotennetzwerk mit den Standardanimationen für Gehen und Winken erstellen.
Für einen tieferen Einblick in praktische Anwendungen können Sie die Animationsgraph-Referenzdatei erkunden, die sowohl grundlegende als auch komplexe Implementierungsbeispiele enthält.
Um Ihren eigenen Animationsgraph zu erstellen, ähnlich dem grundlegenden Beispiel in der Referenz, verwenden Sie die folgenden Schritte:
Fügen Sie im Studio ein animierbares Rig hinzu, indem Sie zur Registerkarte Avatar navigieren und Charakter ⟩ Mein Avatar auswählen.

Öffnen Sie den Animationsgraph-Editor, indem Sie zu Graph-Editor in der Registerkarte Avatar navigieren.

Wählen Sie das animierbare Rig im 3D-Viewport aus und wählen Sie Graph erstellen.
Klicken Sie im Graph-Editor mit der rechten Maustaste und wählen Sie Clip.

Setzen Sie im neuen Clip-Knoten die Animations-ID.
Wählen Sie das Dropdown-Menü Animations-ID aus.
Um eine spezifische Animations-Asset-ID einzureichen, klicken Sie auf Importieren.

Fügen Sie im Feld Animations-ID die Standard-Walk-Animation hinzu: 507777826.
Wählen Sie Importieren.
Fügen Sie einen weiteren Clip-Knoten hinzu, indem Sie die Schritte 4-5 mit der Standard-Wave-Animation wiederholen: 507770239.

Klicken Sie im Graph-Editor mit der rechten Maustaste und wählen Sie Hinzufügen.

Verbinden Sie die Clip-Knoten mit dem Hinzufügen-Knoten, indem Sie den oberen rechten Ausgangsstecker zum entsprechenden Port ziehen:
- Verbinden Sie den Clip-Knoten mit der Gehen-Animation mit dem Basis-Port.
- Verbinden Sie den Clip-Knoten mit der Winken-Animation mit dem Additive-Port.

Verbinden Sie vom Hinzufügen-Knoten den oberen rechten Ausgangsstecker mit dem Graph-Ausgabe-Pose-Port.

- OPTIONALWeisen Sie einen Parameter Ihrer Speed-Variablen zu.
Klicken und ziehen Sie den grünen Speed-Port in einen leeren Bereich. Ein neuer Parameterknoten wird angezeigt.

Verwenden Sie in der oberen linken Ecke des Graph-Editors das Parameterfenster, um Parameter in Ihren Knoten schnell zu ändern. Sie können auch programmgesteuert darauf zugreifen.

Testen Sie die Animation, indem Sie auf die Play-Taste drücken.

Versuchen Sie, verschiedene Gewichte, Geschwindigkeiten, Spielmodi und andere Animationen zu testen. Weitere Informationen zu einzelnen Knoten finden Sie in der Knotenreferenz.
API-Integration
Das Erstellen und Bereitstellen eines Animationsgraphen folgt dem Standard-Animationspipeline von Roblox. Nachdem Sie ein Rig im Animationsgraph-Editor ausgewählt haben, wird ein neues AnimationGraphDefinition-Asset erstellt. Dieses Asset dient als Container für Ihre Knoten, Verbindungen und Parameter. Sobald Ihre Logik abgeschlossen ist, veröffentlichen Sie den Graphen, um eine standardmäßige Asset-ID zu erhalten.
In Ihren Skripten interagieren Sie mit diesen Graphen, indem Sie sie auf einen Animator laden, wie Sie es mit einer traditionellen Animation tun würden. Um die interne Logik des Graphen zu steuern, verwenden Sie AnimationTrack:SetParameter(), um Echtzeitwerte – wie Bewegungsgeschwindigkeit oder Zustandsbooleans – direkt in die Variablen des Graphen zu übergeben.
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Ihre veröffentlichte Graph-ID
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- Dynamische Parameteraktualisierungen über RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)Knotenreferenz
Jeder Animationsgraphknoten dient als Logikgatter oder Datenquelle, die Animationsdaten verarbeitet, bevor sie das Charakter-Rig erreichen. Dieser Abschnitt bietet eine technische Aufschlüsselung der funktionalen Blöcke innerhalb des Animationsgraph-Editors. Alle Knoten geben derzeit eine Animationspose aus.
Jeder Knotenabschnitt enthält:
- Definition – Eine Zusammenfassung des Zwecks und der Rolle des Knotens innerhalb des Graphen.
- Eingaben – Die Datenströme, die in den Knoten gelangen. Mehrere Eingaben werden als Input1, Input2, ..., InputN dargestellt.
- Eingabeeigenschaften – Einstellungen, die direkt mit einer bestimmten Eingabe verbunden sind (eine Idle-Eingabe, die einer Position von 0,5 auf einem Blend1D-Knoten zugewiesen ist).
- Ereignisdaten – Ereignisse, die vom Knoten ausgegeben oder konsumiert werden, um die interne Graphlogik oder externe Luau-Skripte auszulösen. Dieses Verhalten kann sich im Verlauf der Beta-Entwicklung ändern.
Globale Ereignisregeln
Für alle Knoten und Übergänge gelten standardmäßig die folgenden Regeln:
- Ereignisse propagieren von ihrem Quellknoten durch den Graphen nach oben. Jedes Ereignis trägt ein Gewicht, das den Einfluss seiner Quelle auf die endgültige Mischung darstellt. Wenn das Gewicht an irgendeinem Punkt null erreicht, wird das Ereignis stummgeschaltet.
- Knoten ohne benutzerdefinierte Ereignislogik geben alle Ereignisse unverändert weiter; Knoten, die zwischen Eingaben mischen oder auswählen, können das Gewicht skalieren oder Ereignisse von nicht primären Eingaben blockieren (siehe Abschnitt Ereignisse pro Knoten).
- Markerereignisse, die den oberen Teil des Graphen erreichen, können über AnimationTrack:GetMarkerReachedSignal() beobachtet werden.
Clip

Ein Verweis auf ein AnimationClip-Asset. Dies dient als Blattknoten im Graphen, der die Rohanimationsdaten generiert, die in andere Knoten zum Mischen, Auswählen oder Modifizieren eingespeist werden.
- Eingaben
- Keine
- Eigenschaften
Eigenschaft Typ Beschreibung AnimationId String Das zu spielende Animationsasset (z. B. rbxassetid://12345). PlayMode Enum.AnimationNodePlayMode Definiert das Verhalten des Clips, sobald er das Ende seiner Dauer erreicht.
- Loop (Standard): Startet automatisch von vorne, sobald der Clip endet.
- PingPong: Spielt von Anfang bis Ende und spielt dann sofort rückwärts von Ende zu Anfang.
- OnceAndHold: Spielt einmal und hält die endgültige Pose nach Abschluss.
- OnceAndReset: Spielt einmal und springt nach Abschluss zurück zur ursprünglichen Startpose.
Reverse Boolean Steuert die Wiedergabrichtung. Speed Number Ein Multiplikator für die Wiedergabegeschwindigkeit. 0.0 pausiert den Graphen, 1.0 ist normale Geschwindigkeit und 2.0 ist doppelte Geschwindigkeit. Trim Boolean Schaltet um, ob die Dauer des Clips gekürzt werden soll. TrimStart Number Der absolute Zeitstempel (in Sekunden), an dem die Wiedergabe beginnen soll. TrimEnd Number Der absolute Zeitstempel (in Sekunden), an dem die Wiedergabe enden soll. - Ereignisdaten
- Ereignisbehandlung: Keine. Dies ist ein Blattknoten ohne Kinder.
- Ereignisausgabe: Liest benutzerdefinierte Marker, die im Animationsclip eingebettet sind (z. B. "Footstep", "WeaponSwing") und gibt sie als benannte Ereignisse genau zu dem Zeitpunkt aus, an dem sie auftreten. Wenn der Clip gekürzt wird, werden nur Marker innerhalb des definierten [TrimStart, TrimEnd]-Intervalls (einschließlich) ausgegeben.
Select

Wählt zwischen beliebig vielen Eingaben über die Auswahl-Eigenschaft. Jedes Mal, wenn sich die aktuelle Auswahl ändert, wird ein neuer Übergang ausgelöst.
- Eingaben
- Input1...InputN
- Eigenschaften
Eigenschaft Typ Beschreibung Selection String Die eindeutige ID der auszuwählenden Eingabe, die dem Namen der Eingabeverbindung entspricht (z. B. "Walk"). - Ereignisdaten
- Ereignisbehandlung: Ereignisse von der aktuell ausgewählten Eingabe werden mit unverändertem Gewicht weitergegeben.
- Ereignisausgabe: Gibt nur alle Ereignisse von der aktuell ausgewählten Eingabe weiter. Während eines Übergangs folgt die Ereignisausgabe den globalen Ereignisregeln.
PrioritySelect

Bewertet eine Liste von verbundenen Eingaben von oben nach unten und spielt die erste, deren Bedingung als wahr bewertet wird. Dies ermöglicht eine hierarchische Animationsauswahl basierend auf spezifischer Logik. Jedes Mal, wenn sich die aktuelle Auswahl ändert, wird ein neuer Übergang ausgelöst.
- Eingaben
- Input1...InputN
- Trigger (Boolean): Eine logische Bedingung, die wahr sein muss, damit diese Eingabe aktiviert wird. In aktuellen Versionen ist dies mit einem booleschen Parameter verbunden.
- TransitionOverrideInterruptible (Enum.AnimationNodeInterruptible): Definiert die Regel, wann diese aktive Animation von einer höherpriorisierten Eingabe unterbrochen werden kann. Überschreibt die Knotenebene DefaultInterruptible-Einstellung.
- Always (Standard): Die Eingabe kann jederzeit von einer höherpriorisierten Bedingung unterbrochen werden.
- Finished: Die aktuelle Animation muss ihre Wiedergabe beenden, bevor eine höherpriorisierte Eingabe übernehmen kann.
- Trigger: Die Eingabe ist nur unterbrechbar, wenn der InterruptibleTrigger auf wahr gesetzt ist.
- InterruptibleTrigger (Boolean): Nur verfügbar, wenn TransitionOverrideInterruptible auf Trigger gesetzt ist. Die Eingabe kann unterbrochen werden, wenn dieser spezifische Ausdruck wahr ist.
- Eigenschaften
Eigenschaft Typ Beschreibung DefaultInterruptible Enum.AnimationNodeInterruptible Die Baseline-Unterbrechungsregel, die auf alle Eingaben angewendet wird. Jede Eingabe kann dies mit ihrer eigenen TransitionOverrideInterruptible-Eingabeeigenschaft überschreiben. - Ereignisdaten
- Ereignisbehandlung: Ereignisse von der aktuell ausgewählten Eingabe werden mit unverändertem Gewicht weitergegeben.
- Ereignisausgabe: Gibt nur alle Ereignisse von der aktuell ausgewählten Eingabe weiter. Während eines Übergangs folgt die Ereignisausgabe den globalen Ereignisregeln.
Sequence

Aktiviert verbundene Eingaben in einer bestimmten Reihenfolge basierend auf definierten Wartebedingungen. Jedes Mal, wenn sich die aktuelle Auswahl ändert, wird ein neuer Übergang ausgelöst.
- Eingaben
- Input1...InputN
- TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor): Gibt die Bedingung an, die erfüllt sein muss, bevor die Sequenz zur nächsten Eingabe übergeht. Überschreibt die Knotenebene DefaultWaitFor-Einstellung.
- Finished (Standard): Geht zur nächsten Eingabe über, wenn die aktuelle Eingabe einen Zyklus abgeschlossen hat. Das Fortschrittsverhalten hängt von der verbundenen Eingabe ab:
- Einmaliger Clip: Geht über, wenn der Clip endet.
- Schleifenclip: Geht über, nachdem eine vollständige Schleife abgeschlossen ist.
- Sequenz mit unendlichen Schleifen: Geht über, nachdem ein vollständiger Zyklus durch alle Eingaben abgeschlossen ist.
- Sequenz mit endlichen Schleifen: Geht über, nachdem alle Schleifen abgeschlossen sind.
- Trigger: Aktiviert die nächste Eingabe, wenn ein benutzerdefinierter logischer Ausdruck als wahr bewertet wird.
- WaitForTrigger (Boolean): Nur verfügbar, wenn TransitionOverrideWaitFor auf Trigger gesetzt ist.
- Eigenschaften
Eigenschaft Typ Beschreibung LoopCount Number Die Anzahl der Zyklen durch die gesamte Sequenz. Ein Wert von 0 (Standard) bedeutet eine unendliche Schleife. Sobald die Anzahl erreicht ist, respektiert der Knoten die Schleifen- oder Halteeinstellung der letzten Eingabe. DefaultWaitFor Enum.AnimationNodeWaitFor Die Baseline-Wartebedingung, die auf alle Eingaben angewendet wird. Jede Eingabe kann dies mit ihrer eigenen TransitionOverrideWaitFor-Eingabeeigenschaft überschreiben. - Ereignisdaten
- Ereignisbehandlung: Ereignisse von der aktuell aktiven Eingabe werden mit unverändertem Gewicht weitergegeben.
- Ereignisausgabe: Gibt nur alle Ereignisse von der aktuell aktiven Eingabe in der Sequenz weiter. Während eines Übergangs folgt die Ereignisausgabe den globalen Ereignisregeln.
RandomSequence

Wählt und spielt eine seiner verbundenen Eingaben zufällig ab. Wenn die aktuell ausgewählte Animation abgeschlossen ist, wählt der Knoten zufällig eine andere Eingabe zum Abspielen aus. Weisen Sie jeder Eingabe ein spezifisches Gewicht zu, um die Wahrscheinlichkeit ihrer Auswahl zu beeinflussen. Jedes Mal, wenn sich die aktuelle Auswahl ändert, wird ein neuer Übergang ausgelöst.
- Eingaben
- Input1...InputN
- Weight (Number): Bestimmt die Wahrscheinlichkeit, dass diese Eingabe ausgewählt wird; höhere Gewichte erhöhen die Auswahlchance.
- Eigenschaften
Eigenschaft Typ Beschreibung PlayCount Number Die Anzahl der Eingaben, die der Knoten abspielen wird, bevor er stoppt. Sobald erreicht, respektiert der Knoten die Schleifen- oder Halteeinstellung der letzten Eingabe. Standard ist 0 für unendlich. Seed Number Ein Wert, der verwendet wird, um den Zufallszahlengenerator (RNG) zu initialisieren, um sicherzustellen, dass die Sequenz konsistent über verschiedene Clients bleibt. Standardmäßig auf -1 für zufälligen Seed. - Ereignisdaten
- Ereignisbehandlung: Ereignisse von der aktuell aktiven Eingabe werden mit unverändertem Gewicht weitergegeben.
- Ereignisausgabe: Gibt nur alle Ereignisse von der aktuell aktiven Eingabe in der Sequenz weiter. Während eines Übergangs folgt die Ereignisausgabe den globalen Ereignisregeln.
Over

Schichtet die Über-Pose auf die Basis-Pose. In Kombination mit einem Maskenknoten zeigen maskierte Gelenke in der Über-Pose die Basis-Pose vollständig an und erzeugen einen transparenten Überlagerungseffekt.
- Eingaben
- Basis: Die Hintergrund- oder untere Schicht, typischerweise eine Ganzkörperanimation wie Fortbewegung oder einen Idle-Zustand.
- Über: Die Vordergrund- oder obere Schicht, die über die Basis angewendet werden soll, wie eine Handgeste oder eine Werkzeugbenutzungsanimation.
- Eigenschaften
Eigenschaft Typ Beschreibung Weight Number Das Mischgewicht, das verwendet wird, um die Über-Pose abzuschwächen. Standardmäßig auf 1.0 (vollständige Überschreibung) und nicht begrenzt. - Ereignisdaten
- Ereignisbehandlung:
- Der Knoten hört auf Ereignisse von sowohl der Basis- als auch der Über-Eingabe.
- Ereignisausgabe:
- Basisereignisse: Alle Ereignisse von der Basis-Eingabe werden unverändert weitergegeben.
- Überereignisse: Ereignisse von der Über-Eingabe werden durch die Gewichtseigenschaft skaliert.
- Bei Gewicht 0.5 propagieren Über-Ereignisse mit halbem Gewicht.
- Bei Gewicht 0 werden sie stummgeschaltet.
Add

Fügt die Additive-Pose zur Basis-Pose hinzu, abgeschwächt durch ein spezifisches Weight (nicht begrenzt).
- Eingaben
- Basis: Die primäre Animationspose.
- Additive: Die Pose, die auf die Basis geschichtet werden soll.
- Eigenschaften
Eigenschaft Typ Beschreibung Weight Number Bestimmt die Stärke der additiven Pose, die auf die Basis angewendet wird. - Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf Ereignisse von sowohl der Basis- als auch der Additive-Eingabe.
- Ereignisausgabe: Alle Ereignisse von sowohl der Basis- als auch der Additive-Eingabe werden unverändert weitergegeben.
Subtract

Konvertiert eine Animation in eine additive Pose, indem eine relative Basispose von der Zielpose subtrahiert wird (). Das Weight skaliert die B-Pose vor der Subtraktion (nicht begrenzt).
- Eingaben
- A: Die Zielanimationspose.
- B: Die relative Basispose, die subtrahiert werden soll.
- Eigenschaften
Eigenschaft Typ Beschreibung Weight Number Skaliert die B-Pose, bevor sie von A subtrahiert wird. Bei 1.0 (Standard) wird B vollständig subtrahiert; bei 0.0 erfolgt keine Subtraktion. - Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf Ereignisse von sowohl Input A als auch Input B.
- Ereignisausgabe: Alle Ereignisse von sowohl Input A als auch Input B werden unverändert weitergegeben.
Blend1D

Interpoliert linear zwischen den beiden Animationsposen, die der aktuellen Eingabeposition auf einer einzelnen Achse am nächsten sind.
- Eingaben
- Input1...InputN
- Position (Number): Die spezifische Koordinate für jede nachfolgende Eingabe auf der Mischachse.
- Eigenschaften
Eigenschaft Typ Beschreibung Position Number Der aktuell aktive Wert auf der Mischachse, der verwendet wird, um die Animationen zu sampeln. Wenn Position außerhalb des Bereichs der definierten Eingabepositionen liegt, extrapoliert der Knoten mit den beiden nächstgelegenen Eingaben. PhaseSync Enum.AnimationNodePhaseSync Konfiguriert, ob die Zeitplanung der Kindereingaben synchronisiert werden soll.
- Synced (Standard): Normalisierte Synchronisation. Der Knoten berechnet eine "virtuelle Dauer" basierend auf dem gewichteten Durchschnitt der aktiven Eingaben. Jeder Zeitschritt des Eingabeknotens wird angepasst, sodass alle Kinder zur gleichen Phase konvergieren und Animationen unterschiedlicher Längen synchron bleiben.
- Unsynced: Standardmischung, bei der Clips unabhängig mit ihren eigenen Wiedergabegeschwindigkeiten voranschreiten.
- Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf Ereignisse von allen derzeit aktiven Kindknoten.
- Ereignisausgabe: Nur Ereignisse von der aktivsten Eingabe mit dem höchsten Gewicht propagieren, skaliert durch ihr Mischgewicht. Ereignisse von der sekundären Eingabe werden stummgeschaltet.
Blend2D

Mischt mehrere Animationsposen basierend auf zwei Eingabeparametern innerhalb eines 2D-Koordinatenraums. Dies verallgemeinert den Blend1D-Knoten, um komplexe Szenarien zu behandeln, wie das Mischen basierend auf sowohl Bewegungsrichtung als auch Geschwindigkeit gleichzeitig.
- Eingaben
- Input1...InputN
- X (Number): Die X-Koordinate für jede nachfolgende Eingabe.
- Y (Number): Die Y-Koordinate für jede nachfolgende Eingabe.
- Eigenschaften
Eigenschaft Typ Beschreibung InputMode Enum.AnimationNodeBlend2DInputMode Definiert das Koordinatensystem, das zur Bewertung des Blendraums verwendet wird:
- Kartesisch (Standard): Verwendet standardmäßige 2D-Gitterkoordinaten. X und Y repräsentieren die aktuelle Position innerhalb des Blendraums.
- Polar: Verwendet Winkel- und Magnitudenwerte. X repräsentiert die Richtung in Bogenmaß, während Y die Magnitude oder Stärke der Bewegung darstellt. Die Richtung wird stärker gewichtet als die Magnitude, sodass Eingaben bei ähnlichen Winkeln, aber unterschiedlichen Magnituden glatter gemischt werden als Eingaben bei unterschiedlichen Winkeln.
X Number Die aktuelle X-Koordinate (kartesisch) oder Richtung in Bogenmaß (polar). Y Number Die aktuelle Y-Koordinate (kartesisch) oder Magnitude (polar). PhaseSync Enum.AnimationNodePhaseSync Konfiguriert, ob die Zeitplanung der Kindereingaben synchronisiert werden soll.
- Synced (Standard): Normalisierte Synchronisation. Der Knoten berechnet eine "virtuelle Dauer" basierend auf dem gewichteten Durchschnitt der aktiven Eingaben. Jeder Zeitschritt des Eingabeknotens wird angepasst, sodass alle Kinder zur gleichen Phase konvergieren und Animationen unterschiedlicher Längen synchron bleiben.
- Unsynced: Standardmischung, bei der Clips unabhängig mit ihren eigenen Wiedergabegeschwindigkeiten voranschreiten.
- Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf Ereignisse von allen derzeit aktiven Kindknoten.
- Ereignisausgabe: Nur Ereignisse von der aktivsten Eingabe mit dem höchsten Gewicht propagieren, skaliert durch ihr Mischgewicht. Ereignisse von der sekundären Eingabe werden stummgeschaltet.
Mask

Wendet eine vordefinierte Maske auf die Eingabepose an. Eine Maske wird durch ein Gewicht pro Objekt (z. B. Gelenk) in der Rig-Hierarchie definiert, was eine präzise Kontrolle oder "Federung" der Animation ermöglicht.
- Eingaben
- Pose: Die Animationspose, die maskiert werden soll.
- Eigenschaften
Eigenschaft Typ Beschreibung Mask ObjectValue Ein ObjectValue (erstellt als direktes Kind der Masken-AnimationNodeDefinition), das die Maskengewichte definiert. Es kann auf eine von zwei Arten funktionieren:
- Direkt: Der ObjectValue selbst enthält Attribute, die Rig-Objektnamen spezifischen Gewichtswerten zuordnen.
- Durch Referenz: Der ObjectValue verweist auf eine andere Instance, die die Zuordnungsattribute enthält. Dies ermöglicht gemeinsame Masken über verschiedene Knoten im Graphen.
Bei der Erstellung einer Maske können Sie ein Rig-Schema (HumanoidRigDescription oder Picker) auswählen, um die Hierarchie zu füllen.
- HumanoidRigDescription: Standardisiert die Maske für humanoide Charaktere.
- Picker: Ermöglicht dem Benutzer, ein spezifisches Rig im Arbeitsbereich auszuwählen, um die Maskenhierarchie zu füllen.
Invert Boolean Wenn wahr, werden Gewichtswerte als 1 - Gewicht angewendet. Dies ermöglicht die umgekehrte Verwendung einer Maske, ohne ein neues Asset zu erstellen. - Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf alle Ereignisse von der Eingabe Pose.
- Ereignisausgabe: Alle Ereignisse von der Eingabe Pose werden unverändert weitergegeben.
Speed

Ändert die Wiedergabegeschwindigkeit einer eingehenden Animationspose.
- Eingaben
- Pose: Die Animationspose oder der Untergraph, dessen Wiedergabegeschwindigkeit geändert werden soll.
- Eigenschaften
Eigenschaft Typ Beschreibung Speed Number Ein Multiplikator, der auf die Zeitdifferenz () angewendet wird. 0.0 pausiert den Graphen, 1.0 ist normale Geschwindigkeit und 2.0 ist doppelte Geschwindigkeit. - Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf Ereignisse von der Eingabe Pose.
- Ereignisausgabe: Alle Ereignisse von der Eingabe Pose werden unverändert weitergegeben. Beachten Sie, dass sich während die visuelle Wiedergabegeschwindigkeit ändert, die Zeitplanung der ausgegebenen Ereignisse (wie Marker) entsprechend mit der geänderten Wiedergabegeschwindigkeit skaliert.
GraphOutput

Stellt die endgültige bewertete Pose des Graphen dar. Dieser Knoten ist automatisch in allen neuen Graphen im Animationsgraph-Editor enthalten. Seine Anwesenheit stellt sicher, dass der Graph immer gültig ist und konsistent eine Animationspose erzeugt.
- Eingaben
- Pose: Die endgültigen verarbeiteten Animationsdaten, die auf das Rig angewendet werden sollen.
- Eigenschaften
- Keine
- Ereignisdaten
- Ereignisbehandlung: Der Knoten hört auf alle Ereignisse, die durch die letzte verbundene Eingabe weitergegeben werden.
- Ereignisausgabe: Dieser Knoten dient als Austrittspunkt für die Animationspipeline und gibt keine Signale zurück in den Graphen aus.
Übergänge
Mehrere Knoten im Animationsgraph (wie Select, Priority Select, Sequence und Random Sequence) verwalten, wie Animationen gemischt werden, wenn zwischen aktiven Eingaben gewechselt wird. Um Redundanz in der Knotenreferenz zu vermeiden, werden diese Verhaltensweisen durch standardisierte Übergangseigenschaftsgruppen definiert.
Standardübergang

Das grundlegende Mischverhalten, das auf den Knoten angewendet wird, wann immer er zu einer neuen aktiven Eingabe wechselt.
- DefaultTransitionDuration (Zahl): Die Zeit (in Sekunden), die benötigt wird, um vollständig in die neue Pose zu mischen.
- DefaultTransitionCurve (Enum.PoseEasingStyle): Die Easing-Funktion, die während des Mischens angewendet wird. Unterstützt derzeit nur Enum.PoseEasingStyle.Linear und Enum.PoseEasingStyle.CubicV2.
Übergangsüberschreibung

Eingabespezifische Verknüpfungseigenschaften, die den Standardübergang überschreiben. Diese werden angewendet, wenn der Knoten zu dieser spezifischen Eingabe wechselt.
- TransitionOverrideDuration (Zahl): Überschreibt die Standardübergangsdauer.
- TransitionOverrideCurve (Enum.PoseEasingStyle): Überschreibt die Standardübergangskurve. Unterstützt derzeit nur Enum.PoseEasingStyle.Linear und Enum.PoseEasingStyle.CubicV2.
Replikation
Animationsgraphparameter und interner Knotenstatus replizieren sich automatisch. Der Replikationsmodus wird durch Workspace.AuthorityMode zum Zeitpunkt der Erstellung des Animate-Skripts bestimmt:
- In Enum.AuthorityMode.Automatic: Parameter, die über AnimationTrack:SetParameter() festgelegt werden, replizieren sich automatisch zu anderen Peers.
- In Enum.AuthorityMode.Server: Der Server steuert die vollständige Graphsimulation. Alle Knotenstatus, wie die verstrichene Zeit für Enum.AnimationNodeType.ClipNode, und Graphparameter replizieren sich automatisch vom Server zu den Clients. Der Client des besitzenden Spielers verwendet Vorhersage für eine reibungslose lokale Wiedergabe.
Beispiel Animate-Skripte
Um Beispielskripte zu generieren, die einen Animationsgraph für ein Rig steuern, verwenden Sie Graph -> Animate-Skript erstellen im Animationsgraph-Editor. Dies erzeugt eine Skripthierarchie, die unter StarterCharacterScripts (für Spielercharaktere) oder direkt auf dem Rig (für NPCs) platziert wird:
Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)Das Animate ModuleScript enthält die Logik zum Laden des Graphen. Die RunClient- und RunServer-Skripte rufen es im entsprechenden Kontext auf. Welche Skripte enthalten sind, hängt vom Anwendungsfall ab:
| Anwendungsfall | Enthaltene Skripte | Verhalten |
|---|---|---|
| NPC (irgendein Modus) | RunServer | Der Server lädt und spielt den Graphen. Der Status repliziert sich automatisch zu allen Clients. |
| Spieler + Enum.AuthorityMode.Server | RunServer + RunClient | Der Server steuert den Graphen autoritativ. Der besitzende Client aktiviert Enum.PredictionMode für rollback-basierte lokale Vorhersage. |
| Spieler + Enum.AuthorityMode.Automatic | RunClient | Der besitzende Client lädt und spielt den Graphen. Parameter replizieren sich automatisch zum Server und zu anderen Clients. |
Die folgenden Attribute werden im Animate-Skript gespeichert und konfigurieren dessen Verhalten:
| Attribut | Typ | Beschreibung |
|---|---|---|
| GraphName | String | Name des Animationsgraph-Assets. |
| CharacterName | String | Name des Rigs, auf das der Graph abzielt. |
| SourceAssetId | String | Die veröffentlichte Asset-ID des Graphen. Wird zur Laufzeit in veröffentlichten Spielen verwendet. |
| IsServerAuthority | Boolean | Ob das Skript mit Workspace.AuthorityMode auf Server gesetzt wurde. Bestimmt die Replikationsstrategie. |
| PreviewInStudio | Boolean | Wenn wahr (Standard), lädt das Studio-Playtesting den unveröffentlichten Graphen lokal, sodass Sie iterieren können, ohne zu veröffentlichen. Setzen Sie es auf falsch, um das veröffentlichte Asset im Studio zu testen. Beachten Sie, dass dies derzeit in Enum.AuthorityMode.Server nicht unterstützt wird. |
Parameterreplikation im automatischen Modus
Wenn Workspace.AuthorityMode Automatisch ist:
- Der besitzende Client steuert die Graphen der Spielercharaktere; der Server steuert die Graphen der NPCs.
- Parameter, die über AnimationTrack:SetParameter() festgelegt werden, werden automatisch zu anderen Peers repliziert. Mehrere SetParameter-Aufrufe innerhalb eines einzelnen Frames werden zusammengefasst (last-writer-wins).
- Es sind keine zusätzlichen Skripte für den Parametertransport erforderlich – die Engine übernimmt die Replikation intern.
- Andere Clients sehen Parameteraktualisierungen mit einer kleinen Verzögerung (ein Sendintervall plus Netzwerkverzögerung).
Serverautorität
Wenn Workspace.AuthorityMode Server ist:
- Der Server ist autoritativ für alle Graphen – er führt die Simulation aus und repliziert den vollständigen Graphstatus.
- Was repliziert wird: Sowohl Parameter als auch interner Knotenstatus, einschließlich verstrichener Zeit, aktueller Auswahlen, Übergangsfortschritt, Schleifenanzahlen und RNG-Samen. Dies stellt sicher, dass alle Clients identisches Animationsverhalten sehen.
- Spielercharaktere: Der Server steuert den Graphen. Das RunClient-Skript des besitzenden Clients aktiviert automatisch Enum.PredictionMode auf dem Animator, sodass der lokale Spieler eine reibungslose, vorhergesagte Animation sieht, die mit dem Server bei Abweichungen abgeglichen wird.
- NPCs: Der Server steuert den Graphen ausschließlich; Clients beobachten den replizierten Status ohne lokale Simulation.
Parameter steuern
Verwenden Sie AnimationTrack:SetParameter() aus jedem Skript, das den Graphen ausführt:
- NPC (irgendein Modus): Rufen Sie SetParameter aus RunServer (oder einem beliebigen Server-Script mit Zugriff auf den AnimationTrack) auf.
- Spielercharakter im Enum.AuthorityMode.Server: Rufen Sie SetParameter aus beiden RunServer und RunClient auf. Der Server benötigt Parameter, um die autoritative Simulation zu steuern, und der besitzende Client benötigt dieselben Parameter, um seine lokale Vorhersage zu steuern.
- Spielercharakter im Enum.AuthorityMode.Automatic: Rufen Sie SetParameter aus RunClient (oder einem beliebigen Client-LocalScript mit Zugriff auf den AnimationTrack) auf.
Das generierte Animate-Skript enthält einen auskommentierten SetParameter-Block als Ausgangspunkt. Kommentieren Sie ihn aus und ändern Sie ihn, um Parameter aus dem Gameplay-Zustand (Bewegungsgeschwindigkeit, Humanoid-Zustand, Eingabedirection usw.) zu steuern.