Jogar 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.

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

Usando o arquivo Estação Espacial Perigosa file como referência, este tutorial mostra como jogar animações de personagens usando duas técnicas diferentes, incluindo orientações sobre:

  • Trocar IDs de animação de personagem padrão com suas próprias animações personalizadas.
  • Ativando animações em resposta às ações do personagem dentro do espaço 3D.

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

Alterar animações padrão

Cada personagem com um objeto padrão Humanoid predefinido, seja um avatar controlado pelo jogador ou um personagem não jogador (NPC), inclui um conjunto de animações padrão que são reproduzidas sempre que o personagem realiza ações específicas na experiência, como correr, escalar e pular.O Roblox fornece essas animações fora da caixa para cada experiência sem nenhum esforço adicional de script.

Animação Padrão de Queda
>

Animação de Natação Padrão
>

Animação de Subida 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 trocá-las por animações personalizadas que se aplicam a todos os jogadores que se juntam à sua experiência.Essa técnica de design de jogos pode ajudar seus personagens e experiências a se sentirem mais pessoais, envolventes e imersivas.

Para demonstrar, a seção a seguir ensina você a trocar a animação de caminhada padrão por uma animação de ciclo de caminhada personalizada de Criar Animações de Personagem.Usando esse mesmo processo, você pode trocar qualquer uma das animações padrão com seus próprios IDs de animação.

Animação de Caminhada Padrão
>

Animação de Caminhada Personalizada

Crie um script

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

Para criar um script que referenciará os recursos de animação padrão animationIDs:

  1. Na janela Explorer , adicione um novo script ao Serviço de Script de Servidor .

    1. Passe o mouse sobre Serviço de Script de Servidor e clique no botão ⊕.
    2. Do 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 found!")
    end
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

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

Quando detecta um objeto Animator pela primeira vez, o script então imprime "Animador encontrado!" para informá-lo de que o script está funcionando como pretendido.

Substituir assetID

Agora que você sabe que seu script é capaz de detectar quando os jogadores carregam e se conectam ao servidor, você pode modificar seu script para referenciar especificamente o ID de animação que deseja trocar com suas próprias animações personalizadas.

A tabela a seguir contém todas as animações de personagens padrão que você pode chamar e substituir dentro do objeto Animator.Observe que o Inactivo tem duas variações que você pode programar para jogar mais ou menos frequentemente.

Ação de PersonagemReferência de Script de Animação
Correr animateScript.run.RunAnim.AnimationId
Caminhar animateScript.walk.WalkAnim.AnimationId
Pular animateScript.jump.JumpAnim.AnimationId
Inactivo

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

Cair animateScript.fall.FallAnim.AnimationId
Nadar

animateScript.swim.Swim.AnimationId

Nadar (Inactivo)

animateScript.swimidle.SwimIdle.AnimationId

Escalar animateScript.climb.ClimbAnim.AnimationId

Para substituir o ID de recurso de animação de caminhada padrão:

  1. Chame a referência do script de animação padrão, então substitua o assetID com o seu próprio ID de animação personalizado.Por exemplo, o seguinte código de exemplo refere a 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 found!")
    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. Na barra de ferramentas, clique no botão Jogar . O Studio entra no modo de teste de jogo.

      Play button highlighted in Studio's playtesting options.
    2. Caminhe ao redor da estação espacial com seu avatar.

Ativar animações

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

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

Este método de jogar animações é útil porque fornece aos jogadores feedback instantâneo sobre como eles devem interagir com objetos em seu ambiente.Para demonstrar, a seção a seguir mostra como ativar uma animação sempre que os personagens estiverem muito perto de vazamentos de vapor perigosos como uma maneira de sutilmente ensinar os jogadores a evitar caminhar muito perto das paredes.

Inserir volume

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

A far out view of a mansion room. An outline of a box is in the middle of the room to signify the volume that triggers gameplay events.
O Mistério da Avenida Duvall usa volumes para ativar eventos de jogabilidade que mudam a aparência visual da sala.

Ao adicionar um volume à sua experiência, é importante dimensioná-lo para que ele cubra apenas o espaço que você deseja ativar sua animação.Se você tornar o volume muito pequeno, os jogadores podem nunca colidir com a área para reproduzir a animação; conversamente, se você tornar o 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 ativar a animação.

Para inserir um volume ao redor de uma fuga de vapor que vai disparar uma animação:

  1. Na janela Explorer , adicione um novo bloco de parte.
  2. Posicione e redimensione o bloco até que ele cubra a área que você deseja ativar sua animação.
  3. Na janela Propriedades ,
    1. Defina Nome para Detector de Animação .

    2. Defina Transparência para 1 para tornar o bloco invisível.

      An outline of a block is visible around a steam vent to signify the position of the volume.

Crie um script

Agora que você tem uma região definida para ativar sua animação, é hora de criar um script que detecta programaticamente sempre que os jogadores colidem com o volume.Você pode então ouvir 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 colidirem com o volume.Se o servidor fosse ouvir a colisão e reproduzir a animação, pode haver um atraso entre o jogador tocar o volume em seu cliente e ver a animação ser reproduzida devido ao tempo de replicação do servidor para o cliente.

Para criar um script local que detectará quando o personagem do jogador local tocar o volume:

  1. Na janela Explorer , adicione um novo script a StarterCharacterScripts .Essa colocação garante que o script e seus filhos clonem no personagem do jogador ao entrar e quando reaparecerem na experiência.

    1. Expand StarterPlayer , então passe o mouse sobre seu filho StarterCharacterScripts e clique no botão ⊕.
    2. Do menu contextual, insira um LocalScript e renomeie-o 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 por obter o serviço Workspace, que contém todos os objetos que existem no mundo 3D.Isso é importante porque o script precisa referenciar o objeto Part atuando como seu volume.

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

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

Quando qualquer coisa colide com o volume, a função de processamento de evento 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 é o personagem do jogador local .Se for, a função então:

  • Define o debounce para true .
  • Jogar e esperar a animação terminar.
  • Define o debounce de volta para false.

Definir o debounce de false para true para false novamente após a animação terminar de tocar é um padrão de debounce que impede que a animação seja acionada repetitivamente à medida que os jogadores continuam colidindo com o volume.Para mais informações sobre esse padrão de debounce, veja Detectar colisões .

Adicionar animação

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

Para adicionar uma animação para o script local se referir como os jogadores colidem com o volume:

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

    1. Passe o mouse sobre Animação de Ativação e clique no botão ⊕.
    2. Do menu contextual, insira uma Animação .
  2. Selecione o novo objeto de animação, então na janela Propriedades , defina AnimaçãoID para o ID de animação que você deseja disparar quando os jogadores tocarem o volume.Por exemplo, as referências de amostra da Estação Espacial Perigosarbxassetid://3716468774.

  3. Teste sua experiência para garantir que sua animação seja reproduzida quando os jogadores estiverem perto da primeira fuga de vapor.