Spielcharakter-Animationen abspielen

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

Das Spielen von Charakteranimationen ist ein wichtiger Teil dessen, was Avatare und nicht spielbare Charaktere (NPCs) expressiv, realistisch und ansprechend für dein Publikum macht.Neben der Bereitstellung immersiver Visualisierungen bieten Charakteranimationen den Spielern Feedback zu ihren Aktionen, Anleitungen zur Navigation durch die Umgebung und wichtige Informationen über ihren Charakter und andere.

Mit der gefährlichen Raumstation.rbxl als Referenz zeigt dieses Tutorial, wie Sie Charakteranimationen mit zwei verschiedenen Techniken spielen können, einschließlich Anleitungen:

  • Tauschen von Standardcharakter-Animations-AssetIDs mit deinen eigenen benutzerdefinierten Animationen.
  • Auslösen von Animationen als Reaktion auf Charakteraktionen innerhalb des 3D-Raums.

Nach Abschluss dieses Tutorials verfügst du über die Fähigkeiten, Animationen für eine Vielzahl von Spielsituationen anzupassen.

Standard-Animationen ändern

Jeder Charakter mit einem Standard-Humanoid-Objekt, ob es sich um einen von einem Spieler gesteuerten Avatar oder einen Nicht-Spieler-Charakter (NPC) handelt, enthält eine Reihe von Standard-Animationen , die immer abgespielt werden, wenn der Charakter spezifische Erfahrungsaktionen ausführt, wie z. B. Laufen, Klettern und Springen.Roblox bietet diese Animationen out-of-the-Box für jedes Erlebnis ohne zusätzliche Skriptieranstrengungen an.

Standardfall-Animation
>

Standard-Schwimmanimation
>

Standard-Kletteranimation
>

Wenn diese Standard-Animationen jedoch nicht den Designanforderungen für die Umgebung, das Ästhetische oder die Gesamtnarrative deiner Welt entsprechen, kannst du sie durch benutzerdefinierte Animationen ersetzen, die für jeden Spieler gelten, der deiner Erfahrung beitritt.Diese Spieldesigntechnik kann dazu beitragen, dass deine Charaktere und Erlebnisse persönlicher, ansprechender und immersiv werden.

Um zu demonstrieren, lehrt der folgende Abschnitt dich, wie du die Standard-Laufanimation durch eine benutzerdefinierte Laufzyklusanimation von Erstelle Charakteranimationen ersetzen kannst.Mit diesem gleichen Prozess kannst du eine beliebige der Standard-Animationen durch eigene Animationen-AssetIDs ersetzen.

Standard-Laufanimation
>

Benutzerdefinierte Laufanimation

Skript erstellen

Jedes Objekt von jedem Charakter enthält ein Kind Objekt, das alle Standardanimationen des Charakters speichert.Um eine dieser Standardanimationen auf neue Asset-IDs zu setzen, musst du ein Skript im Class.ServiceScriptService erstellen, damit es die Standardwerte des Animator Objekts referenzieren und überschreiben kann, sobald Spieler in die Erfahrung laden.

Um ein Skript zu erstellen, das die Standard-Animations-Asset-IDs referenziert:

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

    1. Bewegen Sie den Mauszeiger über ServerScriptService und klicken Sie auf die Schaltfläche ⊕.
    2. Aus dem Kontextmenü fügen Sie ein Skript ein.
  2. Füge 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 found!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Das ResetDefaultAnimations Skript beginnt, indem es den Players Dienst erhält, der alle Player Objekte für Spieler enthält, die sich mit einem Server verbinden.Wenn sich die Charaktere eines Spielers in das Erlebnis laden, wartet die onCharacterAdded -Funktion, bis sie die Objekte Humanoid und Animator des Charakters erkennt.

Wenn es zum ersten Mal ein Animator-Objekt erkennt, druckt das Skript dann "Animator gefunden!" aus, um Sie darüber zu informieren, dass das Skript wie beabsichtigt funktioniert.

assetID ersetzen

Jetzt, da du weißt, dass dein Skript in der Lage ist zu erkennen, wann Spieler sich mit dem Server verbinden und laden, kannst du dein Skript modifizieren, um spezifisch die Animations-IDs zu referenzieren, die du mit deinen eigenen benutzerdefinierten Animationen austauschen möchtest.

Die folgende Tabelle enthält alle Standardcharakteranimationen, die du innerhalb des Animator -Objekts aufrufen und ersetzen kannst.Beachten Sie, dass Idle zwei Variationen hat, die Sie programmieren können, um mehr oder weniger häufig zu spielen.

ZeichenaktionAnimierte Skript-Referenz
Ausführen animateScript.run.RunAnim.AnimationId
Gehen animateScript.walk.WalkAnim.AnimationId
Springen animateScript.jump.JumpAnim.AnimationId
Leerlauf

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

Sturz animateScript.fall.FallAnim.AnimationId
Schwimmen

animateScript.swim.Swim.AnimationId

Schwimmen (Leerlauf)

animateScript.swimidle.SwimIdle.AnimationId

Klettern animateScript.climb.ClimbAnim.AnimationId

Um die Standard-Laufanimation-AssetID zu ersetzen:

  1. Rufen Sie die Standard-Laufanimationsskript-Referenz auf und ersetzen Sie die assetID durch Ihre eigene benutzerdefinierte Animation-ID.Zum Beispiel bezieht sich das folgende Codebeispiel auf die Laufzyklusanimation aus Erstellen von Charakteranimationen.


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator found!")
    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. Teste deine Erfahrung, um sicherzustellen, dass deine benutzerdefinierte Laufanimation die Standardanimation überschreitet.

    1. Klicke in der Toolbar auf die Schaltfläche Spielen . Studio wechselt in den Spieltest-Modus.

      Play button highlighted in Studio's playtesting options.
    2. Gehe mit deinem Avatar um die Raumstation herum.

Animationen auslösen

Während die vorherige Technik sich auf den Austausch standardmäßiger Animationen konzentriert, die immer dann abgespielt werden, wenn ein Charakter spezifische Erfahrungsaktionen ausführt, kannst du Animationen programmatisch auslösen, um im Zusammenhang mit einer beliebigen Charakteraktion im 3D-Raum zu spielen, wie das Aufheben eines Gegenstands oder das Erleiden von Schaden durch eine Gefahr.

In diesem Beispiel, wenn Spieler die goldene Plattform berühren, werden sie eine nicht standardmäßige Charakter-Tanzanimation auslösen.

Diese Methode zum Spielen von Animationen ist nützlich, weil sie den Spielern sofortiges Feedback gibt, wie sie mit Objekten in ihrer Umgebung interagieren sollten.Um zu demonstrieren, zeigt der folgende Abschnitt Ihnen, wie Sie eine Animation auslösen, wenn Charaktere zu nahe an gefährliche Dampflecks herankommen, um Spieler subtil zu lehren, sich nicht zu nahe an die Wände zu nähern.

Volumen einfügen

Eine der häufigsten Möglichkeiten, einzigartiges Spielverhalten zu triggern, besteht darin, Volumen oder unsichtbare Regionen innerhalb des 3D-Raums zu verwenden, um zu erkennen, wann Charaktere oder Objekte mit bestimmten Bereichen der Umgebung interagieren.Wenn du Volumen mit Skripten paarst, kannst du ihr Kollisions-Feedback verwenden, um Aktionen programmatisch auszulösen, z. B. die Gesundheit des Spielers zu reduzieren oder eine Animation abzuspielen.

A far out view of a mansion room. An outline of a box is in the middle of the room to signify the volume that triggers gameplay events.
Das Geheimnis von Duvall Drive verwendet Volumen, um Spielereignisse auszulösen, die das visuelle Erscheinungsbild des Raums verändern.

Wenn du ein Volumen zu deiner Erfahrung hinzufügst, ist es wichtig, es so zu skalieren, dass es nur den Raum abdeckt, den du aktivieren möchtest, um deine Animation auszulösen.Wenn du deine Lautstärke zu klein machst, können Spieler nie mit dem Bereich kollidieren, um die Animation abzuspielen; im Gegenzug, wenn du deine Lautstärke zu groß machst, wird die Animation abgespielt, bevor Spieler das Element oder den Bereich des Interesses erreichen, und sie können nicht verstehen, was sie getan haben, um die Animation auszulösen.

Um ein Volumen um einen Dampfausbruch herum einzufügen, der eine Animation auslöst:

  1. Füge im Explorer -Fenster einen neuen Blockteil hinzu.
  2. Positioniere und skaliere den Block, bis er den Bereich abdeckt, den du mit deiner Animation aktivieren möchtest.
  3. Im Eigenschaften -Fenster,
    1. Setze Name auf Animationsdetektor .

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

      An outline of a block is visible around a steam vent to signify the position of the volume.

Skript erstellen

Jetzt, da du eine definierte Region hast, um deine Animation auszulösen, ist es Zeit, ein Skript zu erstellen, das programmatisch erkennt, wann Spieler mit der Lautstärke kollidieren.Du kannst dann auf Kollisionsereignisse hören, um jede Animation auszulösen, die für deine Spielanforderungen sinnvoll ist.

Zum Beispiel verwendet diese Animationstechnik eine LocalScript anstelle von einer Script, um den Spielern sofortiges Feedback zu geben, wenn sie mit der Lautstärke 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 die Lautstärke auf seinem Client berührt, und dem Moment, in dem die Animation abgespielt wird, wegen der Reaktionszeit vom Server zum Client.

Um ein lokales Skript zu erstellen, das erkennt, wenn der Charakter des lokalen Spielers die Lautstärke berührt:

  1. Füge im Explorer -Fenster ein neues Skript zu StarterCharacterScripts hinzu.Diese Platzierung gewährleistet, dass das Skript und seine Kinder sich beim Beitritt in den Spielercharakter klonen und , wenn sie wieder in das Erlebnis zurückkehren.

    1. Erweitern Sie StarterPlayer , dann bewegen Sie den Mauszeiger über sein StarterCharacterScripts -Kind und klicken Sie auf die ⊕-Taste.
    2. Im Kontextmenü füge ein Lokales Skript ein und benenne es um in Triggeranimation .
  2. Füge 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, indem es den Workspace-Service erhält, der alle Objekte enthält, die in der 3D-Welt existieren.Dies ist wichtig, weil das Skript auf das Part Objekt verweisen muss, das als dein Volumen fungiert.

Für jeden Spielercharakter, der sich in das Erlebnis laden oder zurückrespawnen lässt, wartet das Skript auf:

  • Sein Kind Animation Objekt, das Sie im nächsten Abschnitt hinzufügen werden.
  • Die Objekte des Charakters Humanoid und Animator.
  • Das Volumenobjekt im Arbeitsbereich mit dem Namen AnimationDetector .

Wenn etwas mit der Lautstärke kollidiert, erhält die Touched Event-Handlungsfunktion den ersten Vorfahren, der ein Model ist, was der Charakter sein sollte, wenn der BasePart, der mit der Lautstärke kollidierte, ein Nachkomme eines Charaktermodells ist.Wenn es das ist, prüft die Funktion dann, ob der der Charakter des lokalen Spielers ist.Wenn es das ist, dann die Funktion:

  • Setzt Debounce auf true.
  • Spielt und wartet, bis die Animation beendet ist.
  • Setzt Debounce zurück auf false.

Die Einstellung des Debounces von false auf true auf false nachdem die Animation beendet ist, wiederzuspielen, ist ein Debounce-Muster, das verhindert, dass die Animation wiederholt ausgelöst wird, da Spieler sich ständig mit der Lautstärke stoßen.Für weitere Informationen zu diesem Debounce-Muster siehe Kollisionen erkennen.

Animation hinzufügen

Wenn du dein Erlebnis gerade testen würdest, wäre dein TriggerAnimation-Skript immer noch nicht in der Lage, eine Animation als Antwort auf die lokale Spielerlautstärkollision abzuspielen.Das liegt daran, dass es auf ein Kind Animation Objekt mit einer Animation-AssetID wartet, auf das es sich beziehen kann, und dass dieses Animation Objekt derzeit nicht existiert.

Um eine Animation für die lokale Skript referenzieren, wenn Spieler mit der Lautstärke kollidieren:

  1. Füge im Explorer -Fenster eine neue Animation zu Triggeranimation hinzu.

    1. Bewegen Sie den Mauszeiger über Triggeranimation und klicken Sie auf die ⊕-Taste.
    2. Aus dem Kontextmenü füge eine Animation ein.
  2. Wähle das neue Animationsobjekt aus, dann im Eigenschaften -Fenster, lege AnimationID auf die AnimationasetID fest, die du auslösen möchtest, wenn Spieler die Lautstärke berühren.Zum Beispiel beziehen sich die gefährliche Raumstation-Probeparameter rbxassetid://3716468774.

  3. Teste deine Erfahrung, um sicherzustellen, dass deine Animation abgespielt wird, wenn Spieler in der Nähe der ersten Dampfleck sind.