Riprodurre le animazioni dei personaggi è una parte importante di ciò che rende avatar e personaggi non giocabili (NPC) espressivi, realistici e coinvolgenti per il tuo pubblico.Oltre a fornire visuali immersive, le animazioni dei personaggi forniscono ai giocatori feedback sulle loro azioni, indicazioni su come navigare nell'ambiente e informazioni vitali sul loro personaggio e su altri.
Usando il file Stazione spaziale pericolosa.rbxl come riferimento, questo tutorial ti mostra come giocare alle animazioni dei personaggi usando due diverse tecniche, tra cui le indicazioni su:
- Scambio di ID di animazione del personaggio predefinito con le tue animazioni personalizzate.
- Attivazione di animazioni in risposta alle azioni del personaggio all'interno dello spazio 3D.
Dopo aver completato questo tutorial, avrai le competenze per personalizzare le animazioni per una vasta gamma di situazioni di gioco.
Cambia le animazioni predefinite
Ogni personaggio con un oggetto predefinito Humanoid di base, che sia un avatar controllato dal giocatore o un personaggio non giocatore (NPC), include un insieme di animazioni predefinite che si riproducono ogni volta che il personaggio esegue azioni specifiche nell'esperienza, come correre, arrampicarsi e saltare.Roblox fornisce queste animazioni out-of-the-box per ogni esperienza senza alcuno sforzo di scripting aggiuntivo.
Tuttavia, se queste animazioni predefinite non soddisfano i requisiti di progettazione per l'ambiente del tuo mondo, l'estetica o la narrazione generale, puoi scambiarle con animazioni personalizzate che si applicano a ogni giocatore che si unisce alla tua esperienza.Questa tecnica di progettazione del gioco può aiutare i tuoi personaggi e le esperienze a sentirsi più personali, coinvolgenti e immersive.
Per dimostrare, la seguente sezione ti insegna come sostituire l'animazione di camminata predefinita con un'animazione di camminata personalizzata da Crea animazioni di personaggio.Usando lo stesso processo, puoi scambiare qualsiasi delle animazioni predefinite con le tue risorse di animazione.
Crea uno script
L'oggetto di ogni personaggio Humanoid include un oggetto figlio Animator che memorizza tutte le animazioni predefinite del personaggio.Per impostare una qualsiasi di queste animazioni predefinite a nuovi ID risorse, devi creare uno script nel Class.ServiceScriptService in modo che possa fare riferimento e sostituire i valori predefiniti dell'oggetto Animator il più presto possibile quando i giocatori caricano l'esperienza.
Per creare uno script che faccia riferimento agli ID di animazione predefiniti:
Nella finestra Explorer , aggiungi un nuovo script a ServerScriptService .
- Passa il mouse su ServerScriptService e clicca il pulsante ⊕.
- Dal menu contestuale, inserisci un Script .
Nella nuova script, incolla il seguente codice:
local Players = game:GetService("Players")local function onCharacterAdded(character)local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")print("Animator found!")endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Lo script ResetDefaultAnimations inizia ottenendo il servizio Players , che contiene tutti gli oggetti Player per i giocatori quando si connettono a un server.Quando ciascuno dei personaggi del giocatore si carica nell'esperienza, la funzione onCharacterAdded attende fino a quando non rileva gli oggetti Humanoid e Animator del personaggio.
Quando rileva per la prima volta un oggetto Animator per l'animatore, lo script poi stampa "Animatore trovato!" per farti sapere che lo script funziona come previsto.
Sostituisci assetID
Ora che sai che il tuo script è in grado di rilevare quando i giocatori si caricano e si connettono al server, puoi modificare il tuo script per fare riferimento specificamente all'ID dell'animazione che vuoi scambiare con le tue animazioni personalizzate.
La seguente tabella contiene tutte le animazioni di carattere predefinite che puoi chiamare e sostituire all'interno dell'oggetto Animator.Nota che Idle ha due varianti che puoi programmare per giocare più o meno frequentemente.
Azione del personaggio | Riferimento allo script di animazione |
Esegui | animateScript.run.RunAnim.AnimationId |
Cammina | animateScript.walk.WalkAnim.AnimationId |
Salta | animateScript.jump.JumpAnim.AnimationId |
Inattivo | animateScript.idle.Animation1.AnimationId``animateScript.idle.Animation2.AnimationId |
Caduta | animateScript.fall.FallAnim.AnimationId |
Nuota | animateScript.swim.Swim.AnimationId |
Nuota (Inattivo) | animateScript.swimidle.SwimIdle.AnimationId |
Scalare | animateScript.climb.ClimbAnim.AnimationId |
Per sostituire l'ID risorsa di animazione di camminata predefinita:
Chiama il riferimento dello script di animazione predefinito, quindi sostituisci l'assetID con il tuo ID di animazione personalizzata.Ad esempio, il seguente esempio di codice fa riferimento all'animazione del ciclo di camminata da Crea animazioni dei personaggi.
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"endlocal function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Prova la tua esperienza per assicurarti che la tua animazione personalizzata sostituisca l'animazione predefinita.
Nella barra degli strumenti, fai clic sul pulsante Gioca . Studio entra in modalità playtest.
Cammina intorno alla stazione spaziale con il tuo avatar.
Attiva le animazioni
Mentre la tecnica precedente si concentra sullo scambio di animazioni predefinite che si riproducono automaticamente ogni volta che un personaggio esegue azioni specifiche nell'esperienza, puoi attivare le animazioni in modo programmatico in risposta a qualsiasi azione del personaggio all'interno dello spazio 3D, come raccogliere un oggetto o subire danni da un pericolo.
Questo metodo di riproduzione delle animazioni è utile perché fornisce ai giocatori un feedback istantaneo su come dovrebbero interagire con gli oggetti nel loro ambiente.Per dimostrare, la seguente sezione ti mostra come attivare un'animazione ogni volta che i personaggi sono troppo vicini a perdite di vapore pericolose come modo di insegnare sottilmente ai giocatori di evitare di camminare troppo vicino ai muri.
Inserisci volume
Uno dei modi più comuni per attivare un comportamento di gioco unico è quello di utilizzare volumi , o regioni invisibili all'interno dello spazio 3D, per rilevare quando i personaggi o gli oggetti interagiscono con aree specifiche dell'ambiente.Quando coppi i volumi con gli script, puoi utilizzare il loro feedback di collisione per attivare azioni in modo programmatico, come ridurre la salute del giocatore o giocare un'animazione.

Quando aggiungi un volume alla tua esperienza, è importante scalarlo in modo che copra solo lo spazio che vuoi attivare per la tua animazione.Se rendi il tuo volume troppo piccolo, i giocatori potrebbero mai collidere con l'area per giocare l'animazione; al contrario, se rendi il tuo volume troppo grande, l'animazione si giocherà prima che i giocatori raggiungano l'oggetto o l'area di interesse, e potrebbero non capire cosa hanno fatto per attivare l'animazione.
Per inserire un volume intorno a una perdita di vapore che attiverà un'animazione:
- Nella finestra Explorer , aggiungi una nuova parte del blocco.
- Posiziona e ridimensiona il blocco fino a quando non copre l'area in cui vuoi attivare l'animazione.
- Nella finestra Proprietà ,
Imposta Nome a AnimationDetector .
Imposta Trasparenza a 1 per rendere il blocco invisibile.
Crea uno script
Ora che hai una regione definita per attivare l'animazione, è il momento di creare uno script che rileva in modo programmatico ogni volta che i giocatori si scontrano con il volume.Puoi quindi ascoltare gli eventi di collisione per attivare qualsiasi animazione che abbia senso per i requisiti del tuo gameplay.
Ad esempio, questa tecnica di animazione utilizza un LocalScript invece di un Script per fornire ai giocatori un feedback immediato quando si scontrano con il volume.Se il server ascoltasse la collisione e riproducesse l'animazione, ci potrebbe essere un ritardo tra il momento in cui il giocatore tocca il volume sul proprio client e vede l'animazione riprodotta a causa del tempo di replicazione dal server al client.
Per creare uno script locale che rilevi quando il personaggio del giocatore locale tocca il volume:
Nella finestra Explorer , aggiungi un nuovo script a StarterCharacterScripts .Questa posizione garantisce che lo script e i suoi figli si clonino nel personaggio del giocatore al join e quando riappaiono nell'esperienza.
- Espandi StarterPlayer , quindi passa il mouse sul suo StarterCharacterScripts figlio e fai clic sul pulsante ⊕.
- Dal menu contestuale, inserisci un LocalScript e rinominalo TriggerAnimation .
Nella nuova script, incolla il seguente codice:
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)
Lo script TriggerAnimation inizia ottenendo il servizio Workspace , che contiene tutti gli oggetti che esistono nel mondo 3D.Questo è importante perché lo script deve fare riferimento all'oggetto Part che agisce come tuo volume.
Per ogni personaggio giocatore che si carica o respawna nuovamente nell'esperienza, lo script attende:
- Il suo oggetto figlio Animation , che aggiungerai nella sezione successiva.
- L'oggetto volume nell'area di lavoro chiamata AnimationDetector .
Quando qualcosa si scontra con il volume, la funzione del gestore eventi Touched ottiene il primo antenato che è un Model , che dovrebbe essere il personaggio se il BasePart che si è scontrato con il volume è un discendente di un modello di personaggio.Se lo è, la funzione poi controlla se il è il personaggio del giocatore locale .Se lo è, la funzione quindi:
- Imposta il debounce a true .
- Gioca e aspetta che l'animazione finisca.
- Imposta il debounce di nuovo a false .
Impostare il debounce da false a true a false di nuovo dopo che l'animazione finisce di giocare è un modello di debounce che impedisce all'animazione di essere ripetutamente attivata come i giocatori continuano a scontrarsi con il volume.Per ulteriori informazioni su questo modello di debounce, vedi Rilevamento delle collisioni .
Aggiungi animazione
Se volessi testare la tua esperienza in questo momento, il tuo TriggerAnimation non sarebbe ancora in grado di riprodurre un'animazione in risposta alla collisione del volume locale del giocatore.Questo perché sta aspettando un oggetto figlio Animation con un'animazione assetID a cui può fare riferimento, e quell'oggetto Animation non esiste attualmente.
Per aggiungere un'animazione per lo script locale da fare riferimento quando i giocatori si scontrano con il volume:
Nella finestra Explorer , aggiungi una nuova animazione a TriggerAnimation .
- Passa il mouse su TriggerAnimation e clicca il pulsante ⊕.
- Dal menu contestuale, inserisci un Animazione .
Seleziona il nuovo oggetto di animazione, quindi nella finestra Proprietà , imposta AnimationID sull'ID di animazione che vuoi attivare quando i giocatori toccano il volume.Ad esempio, i riferimenti di esempio della stazione spaziale pericolosa Hazardous Space Stationrbxassetid://3716468774
Prova la tua esperienza per assicurarti che la tua animazione si riproduca quando i giocatori sono vicini alla prima perdita di vapore.