Das Abspielen von Charakteranimationen ist ein wichtiger Bestandteil dessen, was Avatare und nicht spielbare Charaktere (NPCs) ausdrucksstark, realistisch und für Ihr Publikum ansprechend macht. Neben der Bereitstellung immersiver visueller Effekte geben Charakteranimationen den Spielern Rückmeldung über ihre Aktionen, bieten Anleitung, wie man sich in der Umgebung bewegt, und wichtige Informationen über ihren Charakter und andere.
Anhand der Gefährlichen Raumstation .rbxl-Datei zeigt Ihnen dieses Tutorial, wie Sie Charakteranimationen mit zwei verschiedenen Techniken abspielen, einschließlich Anleitungen zu:
- Austauschen der Standard-Charakteranimations-Asset-IDs durch Ihre eigenen benutzerdefinierten Animationen.
- Auslösen von Animationen als Reaktion auf Charakteraktionen im 3D-Raum.
Nachdem Sie dieses Tutorial abgeschlossen haben, verfügen Sie über die Fähigkeiten, Animationen für eine Vielzahl von Spielsituationen anzupassen.
Standardanimationen ändern
Jeder Charakter mit einem Standardobjekt Humanoid, egal ob es sich um einen von einem Spieler gesteuerten Avatar oder einen NPC handelt, beinhaltet ein Set von Standardanimationen, die abgespielt werden, wann immer der Charakter spezifische erlebnisinterne Aktionen ausführt, wie z. B. Laufen, Klettern und Springen. Roblox bietet diese Animationen von Haus aus für jedes Erlebnis, ohne dass zusätzlicher Skripting-Aufwand erforderlich ist.
Wenn diese Standardanimationen jedoch nicht den Designanforderungen für die Umgebung, Ästhetik oder die Gesamtgeschichte Ihrer Welt entsprechen, können Sie sie durch benutzerdefinierte Animationen ersetzen, die für jeden Spieler gelten, der Ihrem Erlebnis beitritt.
Um dies zu demonstrieren, zeigt der folgende Abschnitt, wie Sie die Standard-Laufanimation durch einen benutzerdefinierten Laufzyklus aus Charakteranimationen erstellen ersetzen. Mit demselben Verfahren können Sie jede der Standardanimationen durch Ihre eigenen Animations-Asset-IDs ersetzen.
Skript erstellen
Jedes Humanoid-Objekt eines Charakters enthält ein Kind-Animator-Objekt, das alle Standardanimationen des Charakters speichert. Um eine dieser Standardanimationen auf neue Asset-IDs festzulegen, müssen Sie ein Skript im ServerScriptService erstellen, damit es die Standardwerte des Animator-Objekts verweisen und überschreiben kann, sobald die Spieler ins Erlebnis geladen werden.
Um ein Skript zu erstellen, das auf die Standard-Animations-Asset-IDs verweist:
Fügen Sie im Explorer-Fenster ein neues Skript zu ServerScriptService hinzu.
- Fahren Sie mit der Maus über ServerScriptService und klicken Sie auf die Schaltfläche ⊕.
- Wählen Sie im Kontextmenü Skript einfügen.
Fügen Sie im neuen Skript den folgenden Code ein:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator gefunden!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Das ResetDefaultAnimations-Skript beginnt mit dem Abrufen des Players-Dienstes, der alle Player-Objekte für Spieler enthält, wenn sie sich mit einem Server verbinden. Wenn die Charaktere jedes Spielers ins Erlebnis geladen werden, wartet die onCharacterAdded-Funktion, bis sie die Humanoid- und Animator-Objekte des Charakters erkennt.
Wenn zum ersten Mal ein Animator-Objekt erkannt wird, druckt das Skript "Animator gefunden!", um Ihnen mitzuteilen, dass das Skript wie vorgesehen funktioniert.
Asset-ID ersetzen
Jetzt, da Sie wissen, dass Ihr Skript in der Lage ist, zu erkennen, wann Spieler laden und sich mit dem Server verbinden, können Sie Ihr Skript modifizieren, um speziell auf die Animations-ID(s) zu verweisen, die Sie durch Ihre eigenen benutzerdefinierten Animationen ersetzen möchten.
Die folgende Tabelle enthält alle Standard-Charakteranimationen, die Sie im Animator-Objekt aufrufen und ersetzen können. Beachten Sie, dass Idle zwei Variationen hat, die Sie so programmieren können, dass sie mehr oder weniger häufig abgespielt werden.
| Charakteraktion | Animate-Skript-Referenz |
| Laufen | animateScript.run.RunAnim.AnimationId |
| Gehen | animateScript.walk.WalkAnim.AnimationId |
| Springen | animateScript.jump.JumpAnim.AnimationId |
| Idle | animateScript.idle.Animation1.AnimationId |
| Fallen | animateScript.fall.FallAnim.AnimationId |
| Schwimmen | animateScript.swim.Swim.AnimationId |
| Schwimmen (Idle) | animateScript.swimidle.SwimIdle.AnimationId |
| Klettern | animateScript.climb.ClimbAnim.AnimationId |
Um die Standardlaufanimations-Asset-ID zu ersetzen:
Rufen Sie die Standard-Laufanimate-Skript-Referenz auf und ersetzen Sie dann die Asset-ID durch Ihre eigene benutzerdefinierte Animations-Asset-ID. Zum Beispiel verweist das folgende Codebeispiel auf die Laufzyklusanimation aus Charakteranimationen erstellen.
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator gefunden!")local animateScript = character:WaitForChild("Animate")animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Testen Sie Ihr Erlebnis, um sicherzustellen, dass Ihre benutzerdefinierte Laufanimation die Standardanimation überschreibt.
Wählen Sie Testen aus dem Dropdown-Menü und klicken Sie auf die Schaltfläche Spielen rechts daneben, um den Spieltest zu beginnen.

Gehen Sie mit Ihrem Avatar um die Raumstation herum.
Animationen auslösen
Während die vorherige Technik sich auf den Austausch von Standardanimationen konzentriert, die automatisch abgespielt werden, wann immer ein Charakter spezifische erlebnisinterne Aktionen ausführt, können Sie programmatisch Animationen auslösen, um als Reaktion auf jede Charakteraktion im 3D-Raum abzuspielen, wie z. B. das Aufheben eines Gegenstands oder das Erleiden von Schäden durch ein Risiko.
Diese Methode zum Abspielen von Animationen ist nützlich, da sie den Spielern sofortiges Feedback gibt, wie sie mit Objekten in ihrer Umgebung interagieren sollten. Um dies zu demonstrieren, zeigt der folgende Abschnitt, wie Sie eine Animation auslösen können, wann immer Charaktere zu nah an gefährlichen Dampf-Lecks sind, um den Spielern dazu zu bringen, zu lernen, dass sie nicht zu nah an die Wände gehen sollen.
Volumen einfügen
Eine der häufigsten Methoden, um einzigartiges Gameplay-Verhalten auszulösen, ist die Verwendung von Volumen, oder unsichtbaren Regionen innerhalb des 3D-Raums, um zu erkennen, wann Charaktere oder Objekte mit bestimmten Bereichen der Umgebung interagieren. Wenn Sie Volumen mit Skripten kombinieren, können Sie deren Kollisionsfeedback verwenden, um programmatisch Aktionen auszulösen, wie z. B. die Gesundheit des Spielers zu verringern oder eine Animation abzuspielen.

Wenn Sie ein Volumen in Ihr Erlebnis einfügen, ist es wichtig, dieses so zu skalieren, dass es nur den Raum abdeckt, den Sie benötigen, um Ihre Animation auszulösen. Wenn Sie Ihr Volumen zu klein machen, könnten die Spieler niemals mit dem Bereich kollidieren, um die Animation abzuspielen; umgekehrt, wenn Sie Ihr Volumen zu groß machen, wird die Animation abgespielt, bevor die Spieler den gewünschten Gegenstand oder Bereich erreichen, und sie könnten nicht verstehen, was sie getan haben, um die Animation auszulösen.
Um ein Volumen um ein Dampfleck einzufügen, das eine Animation auslösen wird:
- Fügen Sie im Explorer-Fenster ein neues Blockteil hinzu.
- Positionieren und skalieren Sie den Block, bis er das Gebiet abdeckt, das Sie für Ihre Animation auslösen möchten.
- Stellen Sie im Eigenschaften-Fenster sicher,
dass Name auf AnimationDetector gesetzt ist.
Setzen Sie Transparenz auf 1, um den Block unsichtbar zu machen.

Skript erstellen
Jetzt, da Sie eine definierte Region für das Auslösen Ihrer Animation haben, ist es Zeit, ein Skript zu erstellen, das programmatisch erkennt, wann Spieler mit dem Volumen kollidieren. Sie können dann auf Kollisionsevents hören, um jede Animation auszulösen, die für Ihre Gameplay-Anforderungen sinnvoll ist.
Dieses Animationsverfahren verwendet beispielsweise ein LocalScript anstelle eines Script, um den Spielern sofortiges Feedback zu geben, wenn sie mit dem Volumen kollidieren. Wenn der Server auf die Kollision hören und die Animation abspielen würde, könnte es eine Verzögerung geben, zwischen dem Moment, in dem der Spieler das Volumen auf seinem Client berührt, und dem Zeitpunkt, an dem die Animation abgespielt wird, wegen der Replikationszeit vom Server zum Client.
Um ein lokales Skript zu erstellen, das erkennt, wann der Charakter des lokalen Spielers das Volumen berührt:
Fügen Sie im Explorer-Fenster ein neues Skript zu StarterCharacterScripts hinzu. Diese Platzierung gewährleistet, dass das Skript und seine Kinder beim Beitritt des Spielers ins Spiel und wenn sie im Erlebnis wiederbelebt werden, kopiert werden.
- Erweitern Sie StarterPlayer, und fahren Sie mit der Maus über das Kind StarterCharacterScripts und klicken Sie auf die Schaltfläche ⊕.
- Wählen Sie im Kontextmenü LocalScript einfügen und benennen Sie es in TriggerAnimation um.
Fügen Sie im neuen Skript den folgenden Code ein:
local Workspace = game:GetService("Workspace")local animation = script:WaitForChild("Animation")local humanoid = script.Parent:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")local animationTrack = animator:LoadAnimation(animation)local animationDetector = Workspace:WaitForChild("AnimationDetector")local debounce = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
Das TriggerAnimation-Skript beginnt mit dem Abrufen des Workspace-Dienstes, der alle Objekte enthält, die in der 3D-Welt existieren. Dies ist wichtig, da das Skript auf das Part-Objekt, das als Ihr Volumen fungiert, zugreifen muss.
Für jeden Spielercharakter, der ins Erlebnis geladen oder zurück ins Erlebnis respawnt, wartet das Skript auf:
- Sein Kind-Animation-Objekt, das Sie im nächsten Abschnitt hinzufügen werden.
- Das Volumenobjekt im Arbeitsbereich mit dem Namen AnimationDetector.
Wenn irgendetwas mit dem Volumen kollidiert, erhält die Touched-Ereignis-Handler-Funktion den ersten Vorfahren, der ein Model ist, was der Charakter sein sollte, wenn der BasePart, der mit dem Volumen kollidiert, ein Nachkomme eines Charaktermodells ist. Wenn ja, überprüft die Funktion, ob das Model der lokale Charakter des Spielers ist. Wenn es das ist, dann:
- Setzt sie debounce auf true.
- Spielt die Animation ab und wartet, bis sie abgeschlossen ist.
- Setzt debounce wieder auf false.
Das Setzen von debounce von false auf true und dann zurück auf false, nachdem die Animation zu Ende ist, ist ein Debounce-Muster, das verhindert, dass die Animation ständig ausgelöst wird, während die Spieler kontinuierlich mit dem Volumen kollidieren. Weitere Informationen zu diesem Debounce-Muster finden Sie unter Kollisionen erkennen.
Animation hinzufügen
Wenn Sie Ihr Erlebnis jetzt testen würden, könnte Ihr TriggerAnimation-Skript dennoch keine Animation als Reaktion auf die Kollision des lokalen Spielers mit dem Volumen abspielen. Das liegt daran, dass es auf ein Kind-Animation-Objekt wartet, dessen Animations-Asset-ID es referenzieren kann, und dieses Animation-Objekt existiert derzeit nicht.
Um eine Animation für das lokale Skript hinzuzufügen, auf die bei Kollisionen der Spieler mit dem Volumen verwiesen werden kann:
Fügen Sie im Explorer-Fenster eine neue Animation zu TriggerAnimation hinzu.
- Fahren Sie mit der Maus über TriggerAnimation und klicken Sie auf die Schaltfläche ⊕.
- Wählen Sie im Kontextmenü Animation einfügen.
Wählen Sie das neue Animationsobjekt aus und setzen Sie im Eigenschaften-Fenster die AnimationID auf die Animations-Asset-ID, die Sie auslösen möchten, wenn Spieler das Volumen berühren. Zum Beispiel verweist das Gefährliche Raumstation Beispiel auf rbxassetid://3716468774, um eine Animation abzuspielen, bei der ein Charakter rückwärts fällt.
Testen Sie Ihr Erlebnis, um sicherzustellen, dass Ihre Animation abgespielt wird, wenn Spieler in der Nähe des ersten Dampflecks sind.