Charakter-Animationen spielen ist ein wichtiger Teil davon, was Avatare und nicht spielbare Charaktere (NPCs) expressiv, realistisch und ansprechend für Ihr Publikum sind. Darüber hinaus, bieten Charakter-Animationen den Spielern Feedback von ihren Aktionen, Anleitung zum Navigieren der Umgebung und lebenswichtige Informationen über ihren Charakter und andere.
Dieses Tutorial zeigt dir, wie du zwei verschiedene Animationstechniken verwenden kannst, um Charakter-Animationen zu spielen, einschließlich Anleitung zu:
- Standard-Charakter-Animationen mit deinen benutzerdefinierten Animationen tauschen.
- Auslösen von Animationen in der Reaktion auf Charakteraktionen innerhalb des Platz.
Nachdem du dieses Tutorial abgeschlossen hast, hast du die Fähigkeit, Animationen für eine Vielzahl von Spielsituationen anzupassen.
Standard-Animationen ändern
Jeder Charakter mit einem Standard- Humanoid -Objekt, egal ob es ein Spieler-controlled-Avatar oder ein Nicht-Spieler-Charakter (NPC) ist, enthält eine Reihe von Standard-Animationen , die immer abgespielt werden, wenn der Charakter spezifische In-Experience-Aktionen ausführt, z. B. Laufen, Klettern und Springen. Roblox bietet diese Animationen aus der
Wenn diese Standard-Animationen jedoch nicht die Design-Anforderungen für die Umgebung, das Aussehen oder die Gesamtwohnung deiner Welt erfüllen, kannst du sie mit benutzerdefinierten Animationen tauschen, die auf jeden Spieler angewendet werden, der deine Erlebnisbetritt. Diese Spieldesign-Technik kann helfen, deine Charaktere und Erfahrungen zu fühlen, persönlicher, ansprechender und immersiver zu machen.
Um das zu zeigen, zeigt die folgende Sektion dir, wie du die Standard-Laufsound-Animation mit einer benutzerdefinierten Laufsound-Animation aus Creating Character Animations tauschen kannst. Mit diesem Prozess kannst du jede der Standard-Animationen mit deinen eigenen Animations-Assets tauschen.
Skript erstellen
Jedes Charakter-Objekt Humanoid enthält ein Kind Animator -Objekt, das alle Standard-Animationen des Charakters speichert. Um eine dieser Standard-Animationen auf neue Asset-IDs zu setzen, musst du ein Skript im Class.ServiceScriptService erstellen, damit es auf die Standardwerte des Charakters
Um ein Skript zu erstellen, das auf die Standard-Animations-Asset-IDs verweist:
In dem Explorer-Fenster fügen Sie ein neues Skript zu ServerScriptService hinzu.
- Bewegen Sie den Mauszeiger über ServerScriptService und klicken Sie auf die Schaltfläche ⊕.
- Vom Kontextmenü, fügen Sie ein Skript ein.
Fügen Sie im neuen Skript, das. PL: die Skriptsden folgenden Codesein:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Das ResetDefaultAnimations-Skript beginnt, indem es den Players -Dienst erhält, der alle Player -Objekte für Spieler enthält, wenn sie sich mit einem Server verbinden. Wenn sich jeder der Spieler:inin die Erlebnis
Wenn es das erste Mal ein Animator -Objekt erkennt, druckt das Skript dann "Animator gefunden!" , um Sie darüber zu informieren, dass das Skript wie vorgesehen funktioniert.
AssetID ersetzen
Da Sie jetzt wissen, dass Ihr Skript in der Lage ist, die Spieler beim Laden und Verbinden mit dem Server zu erkennen, können Sie Ihr Skript modifizieren, um die Animation id(s) zu verwenden, die Sie mit Ihren eigenen benutzerdefinierten Animationen tauschen möchten.
Die folgende Tabelle enthält alle Standard-Charakteranimationen, die Sie aufrufen und ersetzen können, innerhalb des Animator -Objekts. Beachten Sie, dass Idle zwei Variationen hat, die Sie programmieren können, um häufiger oder seltener zu spielen.
Charakter-Aktion | Animieren Script-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 |
Herbst | animateScript.fall.FallAnim.AnimationId |
Schwimmen | animateScript.swim.Swim.AnimationId |
Schwimmen (Leer) | animateScript.swimidle.SwimIdle.AnimationId |
Klettern | animateScript.climb.ClimbAnim.AnimationId |
Um die Standard-Lauf-Animation-AssetID zu ersetzen:
Rufen Sie den Standard-Lauf-Animationsskript-Referenz auf, und ersetzen Sie dann die AssetID durch Ihre eigene benutzerdefinierte Animations-AssetID. Zum Beispiel verwendet das folgende Codebeispiel die Laufzyklus-Animation aus Creating Character Animations.
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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Teste deine Erlebnisse, um sicherzustellen, dass deine benutzerdefinierte Walk-Animation die Animationenüberschreibt.
In der Menüleiste klicken Sie auf die Schaltfläche Spielen . Studio betritt den Spieltest-Modus.
Gehen Sie mit Ihrem Avatar durch die Raumstation.
Animationen auslösen
Während die vorherige Technik darauf konzentriert ist, Standard-Animationen auszutauschen, die automatisch gespielt werden, wenn ein Charakter bestimmte In-Experience-Aktionen ausführt, können Sie programmgesteuert Animationen auslösen, um in der Antwort auf jede Handlung -Handlung im Platzzu spielen, wie das Aufheben eines Gegenstands oder das Erleiden eines Schadens durch eine Gefahr.
Diese Methode, Animationen zu spielen, ist nützlich, da sie den Spielern sofortiges Feedback darüber bietet, wie sie mit Objekten in ihrer Umgebung interagieren sollen. Um dies zu demonstrieren, zeigt der folgende Abschnitt, wie Sie eine Animation jedes Mal auslösen können, wenn sich die Charaktere zu nahe an gefährlichen Dampfausgaben befinden, als ein Weg, um die Spieler daran zu hindern, zu nahe an den Wänden zu gehen.
Einschubmen
Eine der häufigsten Möglichkeiten, einzigartiges Gameplay-Verhalten auszulösen, ist die Verwendung von Lautstärken oder unsichtbaren Regionen innerhalb des Platz, um zu erkennen, wenn sich Charaktere oder Objekte mit bestimmten Bereichen der Umgebung interagieren. Wenn Sie Lautstärken mit Skripten kombinieren, können Sie das Zusammenprallen von Aktionen programmieren, z. B. die Reduzierung der Gesundheit des Spieler:inoder das Spielen einer Animationen.
Wenn Sie ein Volumen zu Ihrem Erlebnis hinzufügen, ist es wichtig, es so zu skalieren, dass es nur den Bereich abdeckt, den Sie Ihre Animationenauslösen möchten. Wenn Sie Ihre Lautstärke zu klein machen, können die Spieler möglicherweise nicht mit dem Bereich kollidieren, um die Animationenzu spielen; im Gegensatz dazu, wenn Sie Ihre Lautstärke zu groß machen, wird die Animation vor den Spielern ausgeführt, die das Item oder den Bereich des Inter
Um eine Lautstärke um einen Kesselkamin zu ergänzen, die eine Animationenauslöst:
- In dem Explorer-Fenster , füge einen neuen Block hinzu.
- Positionieren und Skalieren Sie den Block, bis er die Bereich abdeckt, die Sie Ihre Animationenauslösen möchten.
- Im Eigenschaften -Fenster,
Set Name zu AnimationDetektor .
Setze Transparenz auf 1, um den Block unsichtbar zu machen.
Skript erstellen
Jetzt, da Sie eine definierte Region für das Auslösen Ihrer Animationenhaben, ist es Zeit, ein Skript zu erstellen, das programmgesteuert detektiert, wenn Spieler mit der Lautstärke kollidieren. Sie können dann auf kollisionsevente hören, um jede Animation zu aktivieren, die für Ihre Spielanforderungen sinnvoll ist.
Zum Beispiel verwendet diese Animations技术 ein LocalScript anstelle eines Script, um sofortige Feedback für die Spieler zu liefern, wenn sie mit der Lautstärke kollidieren. Wenn der Server auf die Kollision und das Spielen der Animationenhörte, könnte es eine Verzögerung zwischen dem Spieler, der die Lautstärke berührt, und dem Spieler, der die Animation sieht, geben. Wenn die Server auf die Koll
Um ein lokales Skript zu erstellen, das feststellt, wenn der lokale Spieler:indie Lautstärke berührt:
Im Explorer-Fenster , fügen Sie ein neues Skript zu StartercharacterScripts hinzu. Dieser Platzierung gewährleistet, dass das Skript und seine Kinder in den Spieler-Charakter auf join und wenn sie respawn back into the Erlebnis.
- Erweitern Sie StarterPlayer , dann bewegen Sie den Mauszeiger über seine StartercharacterScripts Tochter und klicken Sie auf die Schaltfläche ⊕.
- Vom Kontextmenü, fügen Sie einen lokalen Skript ein und benennen Sie ihn TriggerAnimation.
Fügen Sie im neuen Skript, das. PL: die Skriptsden folgenden Codesein:
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, indem Sie den Workspace -Dienst erhalten, der alle Objekte enthält, die in der 3D-Welt existieren. Dies ist wichtig, da das Skript auf das Part -Objekt referenzieren muss, das als Ihre Lautstärke agiert.
Für jeden Spieler, der wieder in die Erlebnislädt oder respawns, wartet das Skript auf:
- Sein Kind Animation Objekt, das Sie in der nächsten Sektion hinzufügen.
- Das Lautstärke-Objekt im Arbeitsbereich mit dem Namen AnimationDetector .
Wenn etwas mit der Lautstärke kollidiert, erhält der Touched -Ereignishändler die erste Vorgängerfigur, die ein Model ist, was der Charakter sein sollte, wenn der BasePart mit der Lautstärke kollidiert. Wenn es
- Setzt den Abprall auf true .
- Spielt und wartet auf die Animation, die beendensoll.
- Setzt den Abprall auf false zurück.
Die Einstellung debounce von false zu true zu false nachdem die Animation fertig ist, die Spieler kontinuierlich mit der Lautstärke kollidieren, ist ein Debounce-Muster, das die Animation verhindert, dass die Animation wiederholt ausgelöst wird, wenn Spieler mit der Lautstärke kollidieren. Für weitere Informationen über dieses Debounce-Muster, siehe 1> Kollisionen erkennen1>.
Animation Hinzufügen
Wenn Sie Ihre Erfahrung jetzt spielen würden, würde Ihr TriggerAnimation Skript immer noch nicht in der Lage sein, eine Animation in Reaktion auf die lokale Spieler-Volumen-Kollision zu spielen. Dies liegt daran, dass es auf ein Kind Animation -Objekt mit Animation-AssetID wartet, und dass dieses Animation -Objekt derzeit nicht existiert.
Um eine Animation für das lokale Skript hinzuzufügen, auf die Spieler mit der Lautstärke kollidieren:
In dem Explorer-Fenster , fügen Sie eine neue Animation zu TriggerAnimation hinzu.
- Bewegen Sie den Mauszeiger über TriggerAnimation und klicken Sie auf die Schaltfläche ⊕.
- Vom Kontextmenü, fügen Sie eine Animation ein.
Wählen Sie das neue Objekt, dann in dem Eigenschaften-Fenster , setzen Sie AnimationID auf die Animations资源ID, die Sie auslösen möchten, wenn Spieler den Volumen berühren. Zum Beispiel, die Gefahrgut-Raumstation -Beispiel verweist auf 1> rbxassetid://37164687741> , um eine Animation eines
Teste deine Erfahrung, um sicherzustellen, dass deine Animation abgespielt wird, wenn Spieler in der Nähe des ersten Dampfes sind.