Het spelen van karakteranimaties is een belangrijk onderdeel van wat avatars en niet-speelbare personages (NPC's) expressief, realistisch en boeiend maakt voor je publiek. Naast het bieden van meeslepende visuals, geven karakteranimaties spelers feedback over hun acties, begeleiding over hoe ze zich in de omgeving kunnen bewegen, en belangrijke informatie over hun karakter en anderen.
Met het Hazardous Space Station .rbxl bestand als referentie, laat deze tutorial je zien hoe je karakteranimaties kunt afspelen met behulp van twee verschillende technieken, inclusief begeleiding over:
- Het verwisselen van standaard karakteranimatie asset-ID's met je eigen aangepaste animaties.
- Het activeren van animaties als reactie op karakteracties binnen de 3D-ruimte.
Nadat je deze tutorial hebt voltooid, heb je de vaardigheden om animaties aan te passen voor een breed scala aan gameplay-situaties.
Wijzig standaardanimaties
Elk karakter met een standaard Humanoid object, of het nu een door de speler bestuurde avatar of een niet-spelerspersonage (NPC) is, bevat een set standaardanimaties die worden afgespeeld telkens wanneer het karakter specifieke in-game acties uitvoert, zoals rennen, klimmen en springen. Roblox biedt deze animaties standaard voor elk spel zonder extra scriptinginspanningen.
Als deze standaardanimaties echter niet voldoen aan de ontwerpeisen voor de omgeving, esthetiek of algehele narratief van jouw wereld, kun je ze vervangen door aangepaste animaties die van toepassing zijn op elke speler die jouw spel betreedt.
Om dit te demonstreren, leert de volgende sectie je hoe je de standaard loopanimatie kunt vervangen door een aangepaste loopcyclusanimatie van Create Character Animations. Met ditzelfde proces kun je elke standaardanimatie vervangen door je eigen animatie asset-ID's.
Maak script
Elk karakter's Humanoid object bevat een kind Animator object dat alle standaardanimaties van het karakter opslaat. Om een van deze standaardanimaties in te stellen op nieuwe asset-ID's, moet je een script maken in de ServerScriptService zodat het de standaardwaarden van het Animator object kan refereren en overschrijven zodra spelers in het spel laden.
Om een script te maken dat de standaard animatie asset-ID's referentieert:
In het Explorer venster, voeg een nieuw script toe aan ServerScriptService.
- Beweeg de muis over ServerScriptService en klik op de ⊕ knop.
- Kies in het contextmenu een Script.
Plak in het nieuwe script de volgende code:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator gevonden!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Het ResetDefaultAnimations script begint met het verkrijgen van de Players service, die alle Player objecten bevat voor spelers die verbinding maken met een server. Wanneer elk van de spelers' karakters in het spel laden, wacht de onCharacterAdded functie totdat het het Humanoid en Animator objecten van het karakter detecteert.
Wanneer het voor het eerst een Animator object detecteert, print het script "Animator gevonden!" om je te laten weten dat het script werkt zoals bedoeld.
Vervang asset-ID
Nu je weet dat je script in staat is om te detecteren wanneer spelers laden en verbinding maken met de server, kun je je script aanpassen om specifiek te verwijzen naar de animatie-ID's die je wilt vervangen door je eigen aangepaste animaties.
De volgende tabel bevat alle standaard karakteranimaties die je kunt aanroepen en vervangen binnen het Animator object. Let op dat Idle twee variaties heeft die je kunt programmeren om vaker of minder vaak af te spelen.
| Karakteractie | Animate Script Referentie |
| Rennen | animateScript.run.RunAnim.AnimationId |
| Lopen | animateScript.walk.WalkAnim.AnimationId |
| Springen | animateScript.jump.JumpAnim.AnimationId |
| Idle | animateScript.idle.Animation1.AnimationId |
| Vallen | animateScript.fall.FallAnim.AnimationId |
| Zwemmen | animateScript.swim.Swim.AnimationId |
| Zwemmen (Idle) | animateScript.swimidle.SwimIdle.AnimationId |
| Klimmen | animateScript.climb.ClimbAnim.AnimationId |
Om de standaard loopanimatie asset-ID te vervangen:
Roep de standaard loop animate script referentie aan, en vervang vervolgens de asset-ID door je eigen aangepaste animatie asset-ID. Bijvoorbeeld, de volgende code verwijst naar de loopcyclusanimatie van Create Character Animations.
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator gevonden!")local animateScript = character:WaitForChild("Animate")animateScript.walk.WalkAnim.AnimationId = "rbxassetid://122652394532816"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Speel je spel om te testen of je aangepaste loopanimatie de standaardanimatie overschrijft.
Kies Test in het dropdownmenu en klik op de Speel knop aan de rechterkant om de playtest te starten.

Loop rond in het ruimtevaartuig met je avatar.
Trigger animaties
Terwijl de vorige techniek zich richt op het verwisselen van standaardanimaties die automatisch worden afgespeeld telkens wanneer een karakter specifieke in-game acties uitvoert, kun je programmatisch animaties activeren om af te spelen als reactie op elke karakteractie binnen de 3D-ruimte, zoals het oppakken van een item of het oplopen van schade door een gevaar.
Deze methode van het afspelen van animaties is nuttig omdat het spelers onmiddellijke feedback geeft over hoe ze met objecten in hun omgeving moeten omgaan. Om dit te demonstreren, laat de volgende sectie je zien hoe je een animatie kunt activeren telkens wanneer karakters te dicht bij gevaarlijke stoomlekkages komen als een manier om spelers subtiel te leren vermijden te dicht bij de muren te lopen.
Voeg volume toe
Een van de meest voorkomende manieren om unieke gameplay-gedragingen te activeren, is door volumes te gebruiken, of onzichtbare gebieden binnen de 3D-ruimte, om te detecteren wanneer karakters of objecten interactie hebben met specifieke gebieden van de omgeving. Wanneer je volumes koppelt aan scripts, kun je hun botsingfeedback gebruiken om programmatisch acties te activeren, zoals het verminderen van de gezondheid van de speler of het afspelen van een animatie.

Bij het toevoegen van een volume aan je spel, is het belangrijk om het zo te schalen dat het alleen de ruimte dekt die je wilt gebruiken om je animatie te activeren. Als je je volume te klein maakt, kunnen spelers nooit met het gebied botsen om de animatie af te spelen; omgekeerd, als je je volume te groot maakt, zal de animatie afspelen voordat spelers het item of het gebied van interesse bereiken, en ze begrijpen misschien niet wat ze hebben gedaan om de animatie te activeren.
Om een volume rond een stoomlek toe te voegen dat een animatie zal activeren:
- In het Explorer venster, voeg een nieuw blokdeel toe.
- Positioneer en wijzig de grootte van het blok totdat het het gebied bedekt dat je wilt gebruiken om je animatie te activeren.
- In het Properties venster,
Stel Naam in op AnimationDetector.
Stel Transparantie in op 1 om het blok onzichtbaar te maken.

Maak script
Nu je een gedefinieerd gebied hebt voor het activeren van je animatie, is het tijd om een script te maken dat programmatisch detecteert wanneer spelers met het volume botsen. Je kunt dan luisteren naar botsingsevenementen om elke animatie te activeren die logisch is voor jouw gameplay-eisen.
Bijvoorbeeld, deze animatietechniek gebruikt een LocalScript in plaats van een Script om spelers onmiddellijke feedback te geven wanneer ze met het volume botsen. Als de server naar de botsing zou luisteren en de animatie zou afspelen, zou er een vertraging kunnen zijn tussen het aanraken van het volume door de speler op hun client en het zien van de animatie omdat van de replicatietijd van de server naar de client.
Om een lokaal script te maken dat detecteert wanneer het lokale karakter van de speler het volume aanraakt:
In het Explorer venster, voeg een nieuw script toe aan StarterCharacterScripts. Deze plaatsing zorgt ervoor dat het script en zijn kinderen worden gekloond in het spelerskarakter bij het joinen en wanneer ze opnieuw in het spel respawnen.
- Vouw StarterPlayer uit, beweeg de muis over zijn StarterCharacterScripts kind en klik op de ⊕ knop.
- Kies in het contextmenu een LocalScript en hernoem het naar TriggerAnimation.
Plak in het nieuwe script de volgende code:
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)
Het TriggerAnimation script begint met het verkrijgen van de Workspace service, die alle objecten bevat die bestaan in de 3D-wereld. Dit is belangrijk omdat het script het Part object moet refereren dat als je volume fungeert.
Voor elk spelerskarakter dat in het spel laadt of opnieuw respawnt, wacht het script op:
- Het kind Animation object, dat je in de volgende sectie zult toevoegen.
- Het volume-object in de werkruimte met de naam AnimationDetector.
Wanneer iets met het volume botst, krijgt de Touched event handler functie de eerste voorouder die een Model is, wat het karakter zou moeten zijn als de BasePart die met het volume botste een afstammeling is van een karaktermodel. Als dat zo is, controleert de functie of het Model het lokale karakter van de speler is. Als dat zo is, dan:
- Zet debounce op true.
- Speelt de animatie af en wacht tot deze eindigt.
- Zet debounce terug op false.
Het instellen van debounce van false naar true en weer terug naar false nadat de animatie is afgelopen, is een debounce-patroon dat voorkomt dat de animatie herhaaldelijk wordt geactiveerd terwijl spelers continu met het volume botsen. Voor meer informatie over dit debounce-patroon, zie Detecteer botsingen.
Voeg animatie toe
Als je je spel op dit moment zou testen, zou je TriggerAnimation script nog steeds niet in staat zijn om een animatie af te spelen als reactie op de botsing van de lokale speler met het volume. Dit komt omdat het wacht op een kind Animation object met een animatie asset-ID die het kan refereren, en dat Animation object bestaat momenteel niet.
Om een animatie toe te voegen die het lokale script kan refereren wanneer spelers met het volume botsen:
In het Explorer venster, voeg een nieuwe animatie toe aan TriggerAnimation.
- Beweeg de muis over TriggerAnimation en klik op de ⊕ knop.
- Kies in het contextmenu een Animation.
Selecteer het nieuwe animatieobject, en stel in het Properties venster AnimationID in op de animatie asset-ID die je wilt activeren wanneer spelers het volume aanraken. Bijvoorbeeld, het Hazardous Space Station voorbeeld verwijst naar rbxassetid://3716468774 om een animatie van een karakter dat achterover valt af te spelen.
Speel je spel om te testen of je animatie afspeelt wanneer spelers in de buurt zijn van de eerste stoomlek.