Le animazioni del personaggio giocano è una parte importante di ciò che rende gli avatar e i personaggi non giocabili (NPC) espressi, realistici e coinvolgenti per il tuo pubblico. Oltre a fornire visuali coinvolgenti, le animazioni del personaggio forniscono feedback ai giocatori dalle loro azioni, istruzioni su come navigare nell'Ambientee informazioni importanti sul loro personaggio e altri.
Usando il file Hazardous Space Station.rbxl come riferimento, questo tutorial ti mostra come giocare alle animazioni dei personaggi usando due diverse tecniche, tra cui le istruzioni su:
- Scambio di ID dell'animazione del personaggio predefinito con le tue animazioni personalizzate.
- Attivare le animazioni in risposta alle azioni del personaggio all'interno dello Spazio3D.
Dopo aver completato questo Tutoriale, avrai le abilità di personalizzare le animazioni per una gamma di situazioni di gioco.
Cambio delle animazioni predefinite
Ogni personaggio con un oggetto Humanoid predefinito, che sia un avatar giocatore o un personaggio non giocatore (NPC), include un set di animazioni predefinite che si attiva ogni volta che il personaggio esegue azioni specifiche in-experience, come l'esecuzione, la salita e il salto. Roblox fornisce queste animazioni out-of-the-box per ogni esperienza senza
Tuttavia, se queste animazioni predefinite non soddisfano i requisiti di progettazione per l'Ambiente, l'estetica o la narrazione della tua Mondo, puoi scambiarli 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 tue esperienze a sentire più personali, coinvolgenti e coinvolgenti.
Per dimostrare, la seguente sezione ti insegna come scambiare l'animazione di base con un'animazione di camminata personalizzata da Crea animazioni di personaggio . Usando lo stesso processo, puoi scambiare qualsiasi delle animazioni predefinite con i tuoi own animazione risorse.
Crea script
Ogni oggetto Humanoid di ogni personaggio include un oggetto figlio Animator che memorizza tutte le animazioni predefinite del personaggio. Per impostare qualsiasi di queste animazioni su nuovi ID risorsa, devi creare uno script nel Class.ServiceScriptService in modo che possa
Per creare uno script che si riferisce agli ID di animazione predefiniti:
Nella finestra Explorer, aggiungi uno script nuovo a ServerScriptService .
- Passa il mouse su ServerScriptService e fai clic sul pulsante ⊕.
- Dal menu contestuale, inserisci uno Script .
Nel nuovo script, pasta 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!")local 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 mentre si connettono a un Server. Quando ciascuno dei personaggi del Giocatoresi carica nell'esperienza
Quando rileva per la prima volta un oggetto Animator , lo script poi stampa "Animator trovato!" per informarti che lo script sta funzionando come previsto.
Rimpiazzare AssetID
Ora che sai che il tuo script è in grado di rilevare quando i giocatori caricano e si connettono al Server, puoi modificare il tuo script per fare riferimento specificamente all'animazione id(s) che vuoi scambiare con le tue animazioni personalizzate.
La seguente tabella contiene tutte le animazioni di personaggio predefinite che puoi chiamare e sostituire all'interno dell'oggetto Animator . Nota che Idle ha due variazioni che puoi programmare per giocare più o meno frequentemente.
Azione del personaggio | Riferimento script animato |
Esegui | animateScript.run.RunAnim.AnimationId |
Camminare | 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 |
Nuoto (Inattivo) | animateScript.swimidle.SwimIdle.AnimationId |
Arrampicata | animateScript.climb.ClimbAnim.AnimationId |
Per sostituire l'assetID dell'animazione di base:
Chiama il script di animazione di base e poi sostituisci l'assetID con il tuo personale animazione risorsa. Ad esempio, il seguente esempio di codice fa riferimento all'animazione del ciclo di vita della risorsa Creazione di animazioni di personaggio.
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)Prova la tua esperienza per assicurarti che la tua animazione personalizzata non supera l'animazionipredefinita.
Nella barra dei menu, fai clic sul pulsante Gioca . Studio entra in modalità playtest.
Cammina intorno alla stazione spaziale con il tuo Avatar.
Attivazione delle animazioni
Mentre la tecnica precedente si concentra sullo scambio di animazioni che si attivano automaticamente ogni volta che un personaggio esegue un'azione in-experience specifica, puoi programmaticamente attivare le animazioni per giocare in risposta a qualsiasi azione del personaggio all'interno dello Spazio3D, come raccogliere un oggetto o subire danni da un pericolo.
Questo metodo di giocare alle animazioni è utile perché fornisce ai giocatori feedback istantanei su come interagire con gli oggetti nel loro Ambiente. Per dimostrare, la seguente sezione mostra come attivare un'animazione quando i giocatori sono troppo vicini a perdite di vapore pericolose come un modo per insegnare ai giocatori a non camminare troppo vicino alle pareti.
Inserisci Volume
Uno dei modi più comuni per attivare il comportamento di gioco unico è quello di utilizzare volumi , o regioni invisibili all'interno dello Spazio3D, per rilevare quando i personaggi o gli oggetti interagiscono con aree specifiche dell'Ambiente. Quando si abbina il volume con gli script, si può utilizzare il loro feedback di collisione per programmare azioni, come ridurre la salute del Giocatoreo giocare un'animazioni.
Quando aggiungi un volume alla tua esperienza, è importante scalarlo in modo che copra solo lo spazio che vuoi consentire l'animazioni. Se rendi il tuo volume troppo piccolo, i giocatori potrebbero non mai collisionare con l'area per giocare l'animazioni; al contrario, se rendi il tuo volume troppo grande, l'animazione verrà riprodotta prima che i giocatori raggiungano l'area o l'interesse di interesse, e potrebbero non capire cosa hanno fatto per attivare l'
Per inserire un volume attorno a una perdita di volume che attiverà un'animazioni:
- Nella finestra Explorer , aggiungi una nuova parte del blocco.
- Posiziona e ridimensiona il blocco fino a quando non copre l'area che vuoi attivare la tua animazioni.
- Nella finestra Proprietà ,
Imposta Nome su AnimationDetector .
Imposta Trasparenza a 1 per rendere il blocco invisibile.
Crea script
Ora che hai una regione definita per attivare la tua animazioni, è ora di creare uno script che programmaticamente rileva quando 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 gioco.
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 giocasse l'animazioni, potrebbe esserci un ritardo tra il giocatore che tocca il volume sul suo client e vede l'animazione giocare a causa del tempo di replicazione dal server al client.
Per creare uno script locale che rileva quando il personaggio del Giocatorelocale tocca il volume:
Nella finestra Explorer, aggiungi uno script nuovo a StartercharacterScripts . Questo posizionamento garantisce lo script e i suoi figli clonati nel personaggio del giocatore quando si unisce e quando riappare nella esperienza.
- Espandi StarterPlayer , quindi passa il mouse su sua figlia StarterCharacterScripts e fai clic sul pulsante ⊕.
- Dal menu contestuale, inserisci un Script locale e rinominalo in TriggerAnimation .
Nel nuovo script, pasta 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 Mondo3D. Questo è importante poiché lo script deve fare riferimento all'oggetto Part che agisce come il tuo volume.
Per ciascun personaggio giocatore che si carica o respawna all'esperienza, lo script aspetta:
- Il suo oggetto figlio Animation , che aggiungerai nella prossima sezione.
- L'oggetto volume nell'area di lavoro chiamato AnimaDetector .
Quando qualcosa si scontra con il volume, l'evento Touched dell'evento funzione si ottiene il primo antenato che è un Model , che dovrebbe essere il personaggio se il BasePart che si è scontra con il volume è un discendente di un modello di personaggio
- Imposta il rimbalzo su true .
- Gioca e aspetta che l'animazione Terminare.
- Imposta il rimbalzo di nuovo su false .
Impostare il rimbalzo da false a true a false di nuovo dopo che l'animazione finisce di giocare è un modello di rimbalzo che impedisce che l'animazione si attivi ripetutamente mentre i giocatori continuamente si scontrano con il volume. Per ulteriori informazioni su questo modello di rimbalzo, vedi 1> Rilevando le collisioni1> .
Aggiungi Animazione
Se stessi testando la tua esperienza in questo momento, il tuo script TriggerAnimation non sarebbe in grado di giocare un'animazione in risposta alla collisione del giocatore locale. Ciò è dovuto al fatto che sta aspettando un oggetto figlio Animation con un insieme di risorse per l'animazione, e che l'oggetto Animation non esiste attualmente.
Per aggiungere un'animazione per lo script locale da cui fare riferimento mentre i giocatori si scontrano con il volume:
Nella finestra Explorer , aggiungi una nuova animazione a TriggerAnimation .
- Passa il mouse su TriggerAnimation e fai clic sul pulsante ⊕.
- Dal menu contestuale, inserisci un'animazione.
Seleziona il nuovo oggetto animazione, quindi nella finestra Proprietà , imposta AnimationID sull'animazione assegnata che vuoi attivare quando i giocatori toccano il volume. Ad esempio, il Hazardous Space Station esempio di riferimento fa riferimento a 1> rbxassetid://37164687741> per giocare un'animazione di un personaggio
Prova la tua esperienza per assicurarti che la tua animazione si attivi quando i giocatori sono vicino alla prima perdita di vapore.