Inizia
Tutorial intermedi

Riprodurre animazioni dei personaggi

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Riprodurre animazioni dei personaggi è una parte importante di ciò che rende gli avatar e i personaggi non giocanti (NPC) espressivi, realistici e coinvolgenti per il tuo pubblico. Oltre a fornire visuali immersive, le animazioni dei personaggi forniscono ai giocatori feedback dalle loro azioni, indicazioni su come navigare nell'ambiente e informazioni vitali sul loro personaggio e sugli altri.

Utilizzando il file .rbxl della Stazione Spaziale Pericolosa come riferimento, questo tutorial ti mostra come riprodurre animazioni dei personaggi utilizzando due tecniche diverse, inclusa la guida su:

  • Sostituire gli ID degli asset delle animazioni predefinite dei personaggi con le tue animazioni personalizzate.
  • Attivare 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.

Cambiare le animazioni predefinite

Ogni personaggio con un oggetto Humanoid predefinito, sia esso un avatar controllato dal giocatore o un personaggio non giocante (NPC), include un insieme di animazioni predefinite che vengono riprodotte ogni volta che il personaggio esegue azioni specifiche nel gioco, come correre, arrampicarsi e saltare. Roblox fornisce queste animazioni pronte all'uso per ogni gioco senza alcuno sforzo di scripting aggiuntivo.

Animazione di Caduta Predefinita
Animazione di Nuoto Predefinita
Animazione di Arrampicata Predefinita

Tuttavia, se queste animazioni predefinite non soddisfano i requisiti di design per l'ambiente, l'estetica o la narrativa complessiva del tuo mondo, puoi sostituirle con animazioni personalizzate che si applicano a ogni giocatore che entra nel tuo gioco.

Per dimostrare, la sezione seguente ti insegna come sostituire l'animazione di camminata predefinita con un'animazione di ciclo di camminata personalizzata da Crea Animazioni per Personaggi. Utilizzando questo stesso processo, puoi sostituire qualsiasi delle animazioni predefinite con i tuoi ID di asset di animazione.

Animazione di Camminata Predefinita
Animazione di Camminata Personalizzata

Crea script

Ogni oggetto Humanoid del personaggio include un oggetto figlio Animator che memorizza tutte le animazioni predefinite del personaggio. Per impostare uno qualsiasi di questi ID di animazione predefiniti su nuovi ID di asset, devi creare uno script in ServerScriptService in modo che possa fare riferimento e sovrascrivere i valori predefiniti dell'oggetto Animator non appena i giocatori entrano nel gioco.

Per creare uno script che farà riferimento agli ID di asset delle animazioni predefinite:

  1. Nella finestra Explorer, aggiungi un nuovo script a ServerScriptService.

    1. Passa sopra ServerScriptService e fai clic sul pulsante ⊕.
    2. Dal menu contestuale, inserisci uno Script.
  2. Nel nuovo 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 trovato!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.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 dei giocatori viene caricato nel gioco, la funzione onCharacterAdded attende fino a quando non rileva gli oggetti Humanoid e Animator del personaggio.

Quando rileva un oggetto Animator per la prima volta, lo script stampa "Animator trovato!" per farti sapere che lo script sta funzionando come previsto.

Sostituisci l'ID dell'asset

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 desideri sostituire con le tue animazioni personalizzate.

La seguente tabella contiene tutte le animazioni predefinite dei personaggi che puoi chiamare e sostituire all'interno dell'oggetto Animator. Nota che Idle ha due variazioni che puoi programmare per riprodurre più o meno frequentemente.

Azioni del PersonaggioRiferimento allo Script di Animazione
CorrianimateScript.run.RunAnim.AnimationId
CamminaanimateScript.walk.WalkAnim.AnimationId
SaltaanimateScript.jump.JumpAnim.AnimationId
Idle

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

CadutaanimateScript.fall.FallAnim.AnimationId
Nuota

animateScript.swim.Swim.AnimationId

Nuota (Idle)

animateScript.swimidle.SwimIdle.AnimationId

ArrampicatianimateScript.climb.ClimbAnim.AnimationId

Per sostituire l'ID dell'asset dell'animazione di camminata predefinita:

  1. Chiama il riferimento allo script di animazione di camminata predefinito, quindi sostituisci l'ID dell'asset con il tuo ID di asset di animazione personalizzato. Ad esempio, il seguente campione di codice fa riferimento all'animazione di ciclo di camminata da Crea Animazioni per Personaggi.

    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator trovato!")
    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. Esegui un playtest del tuo gioco per assicurarti che la tua animazione di camminata personalizzata sovrascriva l'animazione predefinita.

    1. Scegli Test dal menu a discesa e fai clic sul pulsante Play a destra per iniziare il playtest.

      Opzione Test nel menu a discesa delle modalità di test del mezzanino di Studio.
    2. Cammina intorno alla stazione spaziale con il tuo avatar.

Attivare animazioni

Mentre la tecnica precedente si concentra sulla sostituzione delle animazioni predefinite che vengono riprodotte automaticamente ogni volta che un personaggio esegue azioni specifiche nel gioco, puoi attivare programmaticamente animazioni da riprodurre in risposta a qualsiasi azione del personaggio all'interno dello spazio 3D, come raccogliere un oggetto o subire danni da un pericolo.

In questo esempio, quando i giocatori toccano la piattaforma dorata, attivano un'animazione di danza non predefinita del personaggio.

Questo metodo di riproduzione delle animazioni è utile perché fornisce ai giocatori un feedback immediato su come dovrebbero interagire con gli oggetti nel loro ambiente. Per dimostrare, la sezione seguente ti mostra come attivare un'animazione ogni volta che i personaggi si avvicinano troppo a perdite di vapore pericoloso come modo per insegnare sottilmente ai giocatori di evitare di camminare troppo vicino ai muri.

Inserisci volume

Uno dei modi più comuni per attivare comportamenti di gioco unici è 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 abbini i volumi con gli script, puoi utilizzare il loro feedback di collisione per attivare programmaticamente azioni, come ridurre la salute del giocatore o riprodurre un'animazione.

Una vista lontana di una stanza di un palazzo. Un contorno di una scatola è al centro della stanza per significare il volume che attiva eventi di gioco.
Il Mistero di Duvall Drive utilizza volumi per attivare eventi di gioco che cambiano l'aspetto visivo della stanza.

Quando aggiungi un volume al tuo gioco, è importante scalarlo in modo che copra solo lo spazio che desideri attivare per la tua animazione. Se rendi il tuo volume troppo piccolo, i giocatori potrebbero non mai collidere con l'area per riprodurre l'animazione; al contrario, se rendi il tuo volume troppo grande, l'animazione verrà riprodotta 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 attorno a una perdita di vapore che attiverà un'animazione:

  1. Nella finestra Explorer, aggiungi un nuovo blocco.
  2. Posiziona e ridimensiona il blocco fino a coprire l'area che desideri attivare per la tua animazione.
  3. Nella finestra Properties,
    1. Imposta Name su AnimationDetector.

    2. Imposta Transparency su 1 per rendere il blocco invisibile.

      Un contorno di un blocco è visibile attorno a una bocca di vapore per significare la posizione del volume.

Crea script

Ora che hai una regione definita per attivare la tua animazione, è tempo di creare uno script che rilevi programmaticamente ogni volta che i giocatori collidono 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 collidono con il volume. Se il server dovesse ascoltare la collisione e riprodurre l'animazione, ci potrebbe essere un ritardo tra il tocco del volume da parte del giocatore sul proprio client e la visualizzazione dell'animazione 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:

  1. Nella finestra Explorer, aggiungi un nuovo script a StarterCharacterScripts. Questa posizione assicura che lo script e i suoi figli vengano clonati nel personaggio del giocatore all'ingresso e quando rinascono nel gioco.

    1. Espandi StarterPlayer, quindi passa sopra il suo figlio StarterCharacterScripts e fai clic sul pulsante ⊕.
    2. Dal menu contestuale, inserisci un LocalScript e rinominalo TriggerAnimation.
  2. Nel nuovo 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 = 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)

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 funge da volume.

Per ogni personaggio giocatore che si carica o rinasce nel gioco, lo script attende:

  • Il suo oggetto figlio Animation, che aggiungerai nella sezione successiva.
  • Gli oggetti Humanoid e Animator del personaggio.
  • L'oggetto volume nello spazio di lavoro chiamato AnimationDetector.

Quando qualsiasi cosa collide con il volume, la funzione gestore dell'evento Touched ottiene il primo antenato che è un Model, che dovrebbe essere il personaggio se il BasePart che ha colliso con il volume è un discendente di un modello di personaggio. Se lo è, la funzione controlla quindi se il Model è il personaggio del giocatore locale. Se lo è, la funzione quindi:

  • Imposta debounce su true.
  • Riproduce e attende che l'animazione finisca.
  • Imposta debounce di nuovo su false.

Impostare debounce da false a true e di nuovo a false dopo che l'animazione ha finito di riprodursi è un modello di debounce che impedisce all'animazione di attivarsi ripetutamente mentre i giocatori collidono continuamente con il volume. Per ulteriori informazioni su questo modello di debounce, vedere Rileva collisioni.

Aggiungi animazione

Se dovessi eseguire un playtest del tuo gioco in questo momento, il tuo script TriggerAnimation non sarebbe ancora in grado di riprodurre un'animazione in risposta alla collisione del giocatore locale con il volume. Questo perché sta aspettando un oggetto figlio Animation con un ID di asset di animazione a cui può fare riferimento, e quell'oggetto Animation attualmente non esiste.

Per aggiungere un'animazione per lo script locale da fare riferimento mentre i giocatori collidono con il volume:

  1. Nella finestra Explorer, aggiungi una nuova animazione a TriggerAnimation.

    1. Passa sopra TriggerAnimation e fai clic sul pulsante ⊕.
    2. Dal menu contestuale, inserisci un'Animazione.
  2. Seleziona il nuovo oggetto animazione, quindi nella finestra Properties, imposta AnimationID sull'ID dell'asset di animazione che desideri attivare quando i giocatori toccano il volume. Ad esempio, il campione della Stazione Spaziale Pericolosa fa riferimento a rbxassetid://3716468774 per riprodurre un'animazione di un personaggio che cade all'indietro.

  3. Esegui un playtest del tuo gioco per assicurarti che la tua animazione venga riprodotta quando i giocatori sono vicini alla prima perdita di vapore.

© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.