Tutoriais intermediários

Reproduzir animações de personagens

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Reproduzir animações de personagens é uma parte importante do que torna avatares e personagens não jogáveis (NPCs) expressivos, realistas e envolventes para seu público. Além de fornecer visuais imersivos, as animações de personagens oferecem feedback aos jogadores sobre suas ações, orientação sobre como navegar pelo ambiente e informações vitais sobre seu personagem e outros.

Usando o arquivo Hazardous Space Station .rbxl como referência, este tutorial mostra como reproduzir animações de personagens usando duas técnicas diferentes, incluindo orientações sobre:

  • Substituir IDs de ativos de animações padrão do personagem por suas próprias animações personalizadas.
  • Acionar animações em resposta a ações do personagem dentro do espaço 3D.

Depois de concluir este tutorial, você terá as habilidades para personalizar animações para uma ampla variedade de situações de jogo.

Alterar animações padrão

Todo personagem com um objeto padrão Humanoid, seja um avatar controlado por jogador ou um personagem não jogável (NPC), inclui um conjunto de animações padrão que são reproduzidas sempre que o personagem realiza ações específicas dentro da experiência, como correr, escalar e pular. O Roblox fornece essas animações prontas para uso para cada experiência sem nenhum esforço adicional de scripting.

Animação de Queda Padrão
Animação de Nado Padrão
Animação de Escalada Padrão

No entanto, se essas animações padrão não atenderem aos requisitos de design para o ambiente, estética ou narrativa geral do seu mundo, você pode substituí-las por animações personalizadas que se aplicam a todos os jogadores que entram na sua experiência.

Para demonstrar, a próxima seção ensina como trocar a animação de caminhada padrão por um ciclo de caminhada personalizado da Criar Animações de Personagens. Usando este mesmo processo, você pode trocar qualquer uma das animações padrão por seus próprios IDs de ativos de animação.

Animação de Caminhada Padrão
Animação de Caminhada Personalizada

Criar script

O objeto Humanoid de cada personagem inclui um objeto filho Animator que armazena todas as animações padrão do personagem. Para definir qualquer uma dessas animações padrão para novos IDs de ativos, você deve criar um script no ServerScriptService para que ele possa fazer referência e substituir os valores padrão do objeto Animator assim que os jogadores entrarem na experiência.

Para criar um script que fará referência aos IDs de ativos de animação padrão:

  1. Na janela Explorer, adicione um novo script ao ServerScriptService.

    1. Passe o mouse sobre ServerScriptService e clique no botão ⊕.
    2. No menu contextual, insira um Script.
  2. No novo script, cole o seguinte código:


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator encontrado!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

O script ResetDefaultAnimations começa obtendo o serviço Players, que contém todos os objetos Player dos jogadores à medida que se conectam a um servidor. Quando cada um dos personagens dos jogadores carrega na experiência, a função onCharacterAdded aguarda até detectar os objetos Humanoid e Animator do personagem.

Quando detecta um objeto Animator pela primeira vez, o script imprime "Animator encontrado!" para avisá-lo que o script está funcionando conforme o esperado.

Substituir ID de ativo

Agora que você sabe que seu script pode detectar quando os jogadores entram e se conectam ao servidor, você pode modificar seu script para fazer referência especificamente ao(s) ID(s) de animação que deseja trocar por suas próprias animações personalizadas.

A tabela a seguir contém todas as animações padrão de personagens que você pode chamar e substituir dentro do objeto Animator. Note que Idle tem duas variações que você pode programar para tocar com mais ou menos frequência.

Ação do PersonagemReferência do Script Animate
CorreranimateScript.run.RunAnim.AnimationId
AndaranimateScript.walk.WalkAnim.AnimationId
PularanimateScript.jump.JumpAnim.AnimationId
Idle

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

CairanimateScript.fall.FallAnim.AnimationId
NadaranimateScript.swim.Swim.AnimationId
Nadar (Idle)animateScript.swimidle.SwimIdle.AnimationId
EscalaranimateScript.climb.ClimbAnim.AnimationId

Para substituir o ID de ativo da animação de caminhada padrão:

  1. Chame a referência do script de animação padrão de caminhada, e então substitua o ID de ativo pelo seu próprio ID de animação personalizada. Por exemplo, o seguinte trecho de código faz referência à animação de ciclo de caminhada da Criar Animações de Personagens.


    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    print("Animator encontrado!")
    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. Teste sua experiência para garantir que sua animação de caminhada personalizada substitua a animação padrão.

    1. Escolha Testar no menu suspenso e clique no botão Jogar à direita para iniciar o teste.

      Opção Testar no menu suspenso dos modos de teste do estúdio.
    2. Ande pela estação espacial com seu avatar.

Acionar animações

Enquanto a técnica anterior foca na troca de animações padrão que são reproduzidas automaticamente sempre que um personagem realiza ações específicas dentro da experiência, você pode programaticamente acionar animações para serem reproduzidas em resposta a qualquer ação do personagem dentro do espaço 3D, como pegar um item ou levar dano de um perigo.

Neste exemplo, quando os jogadores tocam a plataforma dourada, eles ativam uma animação de dança de personagem não padrão.

Esse método de reprodução de animações é útil porque fornece feedback instantâneo aos jogadores sobre como devem interagir com objetos em seu ambiente. Para demonstrar, a próxima seção mostra como acionar uma animação sempre que os personagens estiverem muito próximos de vazamentos de vapor perigosos como uma forma sutil de ensinar os jogadores a evitar caminhar muito perto das paredes.

Inserir volume

Uma das maneiras mais comuns de acionar comportamentos únicos de jogo é usar volumes, ou regiões invisíveis dentro do espaço 3D, para detectar quando personagens ou objetos interagem com áreas específicas do ambiente. Quando você combina volumes com scripts, pode usar o feedback de colisão deles para acionar programaticamente ações, como reduzir a saúde do jogador ou reproduzir uma animação.

Uma vista de longe de um quarto de mansão. Um contorno de uma caixa está no meio do quarto para indicar o volume que aciona eventos de jogo.
The Mystery of Duvall Drive usa volumes para acionar eventos de jogo que mudam a aparência visual do quarto.

Ao adicionar um volume à sua experiência, é importante escalá-lo para que cobre apenas o espaço que você deseja acionar sua animação. Se você fizer seu volume muito pequeno, os jogadores podem nunca colidir com a área para reproduzir a animação; por outro lado, se você fizer seu volume muito grande, a animação será reproduzida antes que os jogadores cheguem ao item ou área de interesse, e eles podem não entender o que fizeram para acionar a animação.

Para inserir um volume ao redor de um vazamento de vapor que acionará uma animação:

  1. Na janela Explorer, adicione um novo bloco.
  2. Posicione e redimensione o bloco até que cubra a área que você deseja acionar sua animação.
  3. Na janela Properties,
    1. Defina Name como AnimationDetector.

    2. Defina Transparency como 1 para tornar o bloco invisível.

      Um contorno de um bloco é visível ao redor de uma ventoinha de vapor para indicar a posição do volume.

Criar script

Agora que você tem uma região definida para acionar sua animação, é hora de criar um script que detecta programaticamente sempre que os jogadores colidem com o volume. Você pode então escutar os eventos de colisão para acionar qualquer animação que faça sentido para os requisitos do seu jogo.

Por exemplo, essa técnica de animação usa um LocalScript em vez de um Script para fornecer feedback imediato aos jogadores quando eles colidem com o volume. Se o servidor fosse escutar a colisão e reproduzir a animação, poderia haver um atraso entre o toque do jogador no volume em seu cliente e a visualização da animação devido ao tempo de replicação do servidor para o cliente.

Para criar um script local que detecte quando o personagem do jogador local toca o volume:

  1. Na janela Explorer, adicione um novo script ao StarterCharacterScripts. Essa colocação garante que o script e seus filhos sejam clonados para o personagem do jogador ao ingressar e quando eles renascerem na experiência.

    1. Expanda StarterPlayer, depois passe o mouse sobre seu filho StarterCharacterScripts e clique no botão ⊕.
    2. No menu contextual, insira um LocalScript e renomeie-o para TriggerAnimation.
  2. No novo script, cole o seguinte código:


    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)

O script TriggerAnimation começa obtendo o serviço Workspace, que contém todos os objetos que existem no mundo 3D. Isso é importante porque o script precisa fazer referência ao objeto Part que atua como seu volume.

Para cada personagem jogador que carrega ou renasce na experiência, o script aguarda:

  • Seu objeto filho Animation, que você adicionará na próxima seção.
  • Os objetos Humanoid e Animator do personagem.
  • O objeto do volume no espaço de trabalho nomeado AnimationDetector.

Quando qualquer coisa colide com o volume, a função do manipulador de eventos Touched obtém o primeiro ancestral que é um Model, que deve ser o personagem se o BasePart que colidiu com o volume for um descendente de um modelo de personagem. Se for, a função então verifica se o Model é o personagem do jogador local. Se for, a função então:

  • Define debounce como true.
  • Reproduz e aguarda o fim da animação.
  • Define debounce como false.

Definir debounce de false para true e depois de volta para false após o término da animação é um padrão de debounce que previne que a animação seja acionada repetidamente enquanto os jogadores colidem continuamente com o volume. Para mais informações sobre este padrão de debounce, veja Detectar colisões.

Adicionar animação

Se você fosse testar sua experiência agora mesmo, seu script TriggerAnimation ainda não seria capaz de reproduzir uma animação em resposta à colisão do jogador local com o volume. Isso ocorre porque ele está aguardando um objeto filho Animation com um ID de ativo de animação que pode referenciar, e esse objeto Animation atualmente não existe.

Para adicionar uma animação para o script local referenciar enquanto os jogadores colidem com o volume:

  1. Na janela Explorer, adicione uma nova animação ao TriggerAnimation.

    1. Passe o mouse sobre TriggerAnimation e clique no botão ⊕.
    2. No menu contextual, insira uma Animation.
  2. Selecione o novo objeto de animação e, em seguida, na janela Properties, defina AnimationID como o ID de ativo de animação que você deseja acionar quando os jogadores tocam o volume. Por exemplo, o exemplo da Hazardous Space Station refere-se a rbxassetid://3716468774 para reproduzir uma animação de um personagem caindo para trás.

  3. Teste sua experiência para garantir que sua animação seja reproduzida quando os jogadores estiverem próximos do primeiro vazamento de vapor.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.