Tutorials für Fortgeschrittene

Spielfigur-Animationen abspielen

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

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.

Standard-Fall-Animation
Standard-Schwimm-Animation
Standard-Kletter-Animation

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.

Standard-Lauf-Animation
Benutzerdefinierte Lauf-Animation

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:

  1. Fügen Sie im Explorer-Fenster ein neues Skript zu ServerScriptService hinzu.

    1. Fahren Sie mit der Maus über ServerScriptService und klicken Sie auf die Schaltfläche ⊕.
    2. Wählen Sie im Kontextmenü Skript einfügen.
  2. 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!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.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.

CharakteraktionAnimate-Skript-Referenz
LaufenanimateScript.run.RunAnim.AnimationId
GehenanimateScript.walk.WalkAnim.AnimationId
SpringenanimateScript.jump.JumpAnim.AnimationId
Idle

animateScript.idle.Animation1.AnimationId
animateScript.idle.Animation2.AnimationId

FallenanimateScript.fall.FallAnim.AnimationId
SchwimmenanimateScript.swim.Swim.AnimationId
Schwimmen (Idle)animateScript.swimidle.SwimIdle.AnimationId
KletternanimateScript.climb.ClimbAnim.AnimationId

Um die Standardlaufanimations-Asset-ID zu ersetzen:

  1. 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"
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  2. Testen Sie Ihr Erlebnis, um sicherzustellen, dass Ihre benutzerdefinierte Laufanimation die Standardanimation überschreibt.

    1. Wählen Sie Testen aus dem Dropdown-Menü und klicken Sie auf die Schaltfläche Spielen rechts daneben, um den Spieltest zu beginnen.

      Testoption im Dropdown-Menü für Testmodi in der Mezzanine von Studio.
    2. 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.

In diesem Beispiel, wenn Spieler die goldene Plattform berühren, lösen sie eine nicht-standardmäßige Tänzeranimation für Charaktere aus.

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.

Eine weite Sicht auf einen Raum in einem Herrenhaus. Eine Umrisszeichnung eines Kastens ist in der Mitte des Raumes sichtbar, um das Volumen zu kennzeichnen, das das Gameplay-Ereignis auslöst.
Das Rätsel von Duvall Drive verwendet Volumen, um Gameplay-Ereignisse auszulösen, die das visuelle Erscheinungsbild des Raums ändern.

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:

  1. Fügen Sie im Explorer-Fenster ein neues Blockteil hinzu.
  2. Positionieren und skalieren Sie den Block, bis er das Gebiet abdeckt, das Sie für Ihre Animation auslösen möchten.
  3. Stellen Sie im Eigenschaften-Fenster sicher,
    1. dass Name auf AnimationDetector gesetzt ist.

    2. Setzen Sie Transparenz auf 1, um den Block unsichtbar zu machen.

      Eine Umrisszeichnung eines Blocks ist sichtbar rund um einen Dampfauslass, um die Position des Volumens zu markieren.

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:

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

    1. Erweitern Sie StarterPlayer, und fahren Sie mit der Maus über das Kind StarterCharacterScripts und klicken Sie auf die Schaltfläche ⊕.
    2. Wählen Sie im Kontextmenü LocalScript einfügen und benennen Sie es in TriggerAnimation um.
  2. 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 = false
    animationDetector.Touched:Connect(function(hit)
    if debounce then
    return
    end
    local hitCharacter = hit:FindFirstAncestorWhichIsA("Model")
    if hitCharacter ~= localCharacter then
    return
    end
    debounce = true
    animationTrack:Play()
    animationTrack.Ended:Wait()
    debounce = false
    end)

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.
  • Die Humanoid- und Animator-Objekte des Charakters.
  • 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:

  1. Fügen Sie im Explorer-Fenster eine neue Animation zu TriggerAnimation hinzu.

    1. Fahren Sie mit der Maus über TriggerAnimation und klicken Sie auf die Schaltfläche ⊕.
    2. Wählen Sie im Kontextmenü Animation einfügen.
  2. 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.

  3. Testen Sie Ihr Erlebnis, um sicherzustellen, dass Ihre Animation abgespielt wird, wenn Spieler in der Nähe des ersten Dampflecks sind.

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