Animações de personagens de jogo é uma parte importante do que torna os avatares e personagens não jogáveis (NPCs) expressivos, realistas e envolventes para seu público. Além de fornecer visuais imersivos, animações de personagens fornecem feedback aos jogadores de suas ações, orientações 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 jogar animações de personagens usando duas técnicas diferentes, incluindo orientações sobre:
- Trocando os IDs de animação de personagem padrão com suas próprias animações personalizadas.
- Gerando 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 variedade de situações de jogo.
Mudando Animações Padrão
Cada personagem com um Objetopadrão Humanoid, seja ele um avatar controlado por um jogador ou um personagem não jogador (NPC), inclui um conjunto de animações padrão que são executadas sempre que o personagem realiza ações específicas na experiência, como correr, escalar e pular. O Roblox fornece essas animações diretamente para cada experiência sem nenhum esforço de script adicional
No entanto, se essas animações padrão não atender aos requisitos de design para o ambiente do seu mundo, estética ou geralmente, você pode trocá-las com animações personalizadas que se aplicam a todos os jogadores que se juntam à sua experiência. Esta técnica de design de jogos pode ajudar seus personagens e experiências a se sentir mais pessoais, envolventes e imersivo.
Para demonstrar, a seção a seguir ensina você como trocar a animação de caminhada padrão com uma animação de ciclo de caminhada personalizada da Criação de Animações de Personagens. Usando o mesmo processo, você pode trocar qualquer uma das animações padrão com seus próprios IDs de animação.
Criar Script
Cada 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 Class.ServiceScriptService para que ele
Para criar um script que irá referenciar os IDs de animação padrão:
Na janela Explorer , adicione um novo script ao ServerScriptService .
- Passe o mouse sobre ServerScriptService e clique no botão ⊕.
- Do menu contextual, insira um Script .
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!")local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
O script ResetDefaultAnimations começa obtendo o serviço Players, que contém todos os objetos Player para os jogadores à medida que eles se conectam a um servidor. Quando cada um dos personagens do jogador carrega
Quando detecta um objeto Animator pela primeira vez, o script então imprime "Animator encontrado!" para letá-lo saber que o script está funcionando como deveria.
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 especificamente referenciar o ID de animação(s) que você 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 ObjetoAnimator. Observe que o Idle tem duas variações que você pode programar para jogar mais ou menos frequentemente.
Ação de Personagem | Referência de Script de Animação |
Corra | animateScript.run.RunAnim.AnimationId |
Caminhar | animateScript.walk.WalkAnim.AnimationId |
Saltar | animateScript.jump.JumpAnim.AnimationId |
Inativo | 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 animação de caminhada padrão:
Chame o script de animação de caminhada padrão, então substitua o script de animação de caminhada por seu próprio script de animação de personagens. Por exemplo, o seguinte código de exemplo refere-se à animação de ciclo de caminhada de Criando 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"local function onPlayerAdded(player)player.CharacterAdded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)Teste sua experiência para garantir que sua animação de caminhada personalizada seja sobreposida pela animaçõespadrão.
Na barra de menu, clique no botão Jogar . Studio entra no modo de teste de jogo.
Ande pela estação espacial com seu avatar.
Animações de Trigger
Enquanto a técnica anterior se concentra em trocar animações padrão que são executadas automaticamente sempre que um personagem realiza ações específicas na experiência, você pode programaticamente ativar animações para serem executadas em resposta a qualquer ação de personagem dentro do espaço 3D, como pegar um item ou levar dano de um perigo.
Este método de jogar animações é útil, pois fornece feedback instantâneo aos jogadores 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 perto de vazamentos de vapor perigoso como uma maneira de ensinar subtelmente os jogadores para não caminhar muito perto das paredes.
Inserir Volume
Um dos modos mais comuns para acionar comportamentos de jogo únicos é 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ê combina sons com scripts, você pode usar seu feedback de colisão para programar ações, como reduzir a saúde do jogador ou jogar uma animações.
Ao adicionar um volume à sua experiência, é importante escalá-lo para que ele apenas cobre o espaço que você deseja cobrir com sua animações. Se você fizer seu volume muito pequeno, os jogadores podem nunca colidir com a área para a qual você deseja iniciar a animações; conversamente, se você fizer seu volume muito grande, a animação será executada antes que os jogadores alcancem a área de interesse ou item, e eles podem não entender o que você fez para iniciar a
Para inserir um volume ao redor de uma fuga de vapor que causará uma animações:
- Na janela Explorer , adicione uma nova peça de bloco.
- Posicione e redimensione o bloco até que ele cubra a área que você deseja ativar sua animações.
- Na janela Propriedades ,
Definir Nome para Detector de Animação .
Definir Transparência para 1 para tornar o bloco invisível.
Criar Script
Agora que você tem uma região definida para acionar sua animações, é hora de criar um script que programaticamente detecta sempre que os jogadores colidem com o volume. Você pode então ouvir eventos de colisão para acionar qualquer animação que tenha sentido para seus requisitos de jogabilidade.
Por exemplo, esta 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 ouvir a colisão e jogar a animações, pode haver um atraso entre o jogador tocando o volume em seu cliente e vendo a animação jogar 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:
Na janela Explorer , adicione um novo script à StartercharacterScripts . Este local de colocação garante que o script e seus filhos sejam clonados para o personagem do jogador ao entrar e quando eles renascem de volta na experiência.
- Expanda StarterPlayer , então passe o mouse sobre seu StarterCharacterScripts filho e clique no botão ⊕.
- Do menu contextual, insira um LocalScript e renomeie-o TriggerAnimation.
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 = falseanimationDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")if hitCharacter ~= localCharacter thenreturnenddebounce = trueanimationTrack:Play()animationTrack.Ended:Wait()debounce = falseend)
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 referenciar o objeto Part atuando como seu volume.
Para cada personagem de jogador que carrega ou reaparece de volta na experiência, o script aguarda:
- Seu Objetofilho Animation, que você adicionará na próxima seção.
- O objeto de volume no espaço de trabalho chamado AnimaçãoDetector .
Quando algo colide com o volume, o Touched evento hábil de função obtém o primeiro ancestral que é um Model , que deve ser o personagem se o BasePart que colidiu com o volume é um descendente de um modelo de jogador. Se for, a
- Define o retorno de true .
- Joga e aguarda a animação terminar/parar/sair.
- Define o retorno de bounce de volta para false.
Configurar o desbounce de false para true parafalse novamente após o término da animação é um padrão de desbounce que impede que a animação seja acionada repetidamente à medida que os jogadores colidem continuamente com o volume. Para mais informações sobre esse padrão de desbounce, veja 1>Detectando Colisões1>.
Adicionar Animação
Se você estivesse testando sua experiência agora, seu script TriggerAnimation ainda não poderia reproduzir uma animação em resposta à colisão de volume local. Isso ocorre porque ele está esperando por um filho Animation objeto com um recurso de animação que ele pode referenciar, e que Animation objeto não existe atualmente.
Para adicionar uma animação para o script local se referenciar enquanto os jogadores colidem com o volume:
Na janela Explorer , adicione uma nova animação à TriggerAnimation .
- Passe o mouse sobre TriggerAnimation e clique no botão ⊕.
- Do menu contextual, insira uma Animação .
Selecione o novo Objetode animação, então na janela Propriedades, defina AnimaçãoID para o ID de animação que você deseja inserir quando os jogadores tocarem o volume. Por exemplo, a amostra Hazardous Space Station referencia 2> rbxassetid://37164687742> para jogar uma animação de um personagem cain
Teste sua experiência para garantir que sua animação seja jogável quando os jogadores estiverem perto da primeira fuga de vapor.