O Editor de Gráficos de Animação é uma ferramenta visual baseada em nós que capacita artistas técnicos e animadores a construir lógica de animação complexa diretamente dentro do Roblox Studio. Ao fornecer uma interface simplificada para criar comportamentos como árvores de mistura, remove a dependência tradicional de scripts manuais para o movimento de personagens.
Este sistema funciona em conjunto com seu fluxo de trabalho de animação existente:
- Editor de Animação: Continue usando o Editor de Animação como sua ferramenta principal para criar clipes individuais e ajustar quadros-chave e curvas.
- Editor de Gráficos de Animação: Use esta ferramenta para pegar esses clipes e organizá-los em uma árvore lógica para impulsionar comportamentos de jogo sofisticados.
Projetado para melhorar a colaboração, o gráfico visual permite que os desenvolvedores inspecionem, depurem e entendam rapidamente a lógica criada pelos animadores. Enquanto os artistas se concentram em refinar o movimento interativo, os desenvolvedores ainda podem acessar os nós do gráfico de animação programaticamente para controle direto sobre animações e estados misturados.
Construir um gráfico
Para começar a construir lógica para um personagem animável, acesse o editor de Gráficos de Animação através da aba Avatar na faixa de opções do Studio. Os seguintes passos demonstram como inicializar um rig e construir uma rede de nós básica usando animações padrão de caminhada e aceno.
Para uma análise mais profunda de aplicações práticas, você pode explorar o Arquivo de Referência de Gráficos de Animação, que contém exemplos de implementação tanto fundamentais quanto complexos.
Para criar seu próprio gráfico de animação, semelhante ao exemplo básico fornecido na referência, use os seguintes passos:
No Studio, adicione um rig animável navegando até a aba Avatar e selecionando Personagem ⟩ Meu Avatar.

Abra o Editor de Gráficos de Animação navegando até Editor de Gráficos na aba Avatar.

Selecione o rig animável na viewport 3D e selecione Criar Gráfico.
No Editor de Gráficos, clique com o botão direito e selecione Clip.

No novo nó Clip, defina o ID da Animação.
Selecione o dropdown ID da Animação.
Para enviar um ID de ativo de animação específico, clique em Importar.

No campo ID da Animação, adicione a animação padrão de Caminhada: 507777826.
Selecione Importar.
Adicione outro nó de clip repetindo os passos 4-5 usando a animação padrão de Aceno: 507770239.

No Editor de Gráficos, clique com o botão direito e selecione Adicionar.

Conecte os nós Clip ao nó Adicionar arrastando o conector de saída superior direito para a porta apropriada:
- Conecte o nó Clip com a animação de Caminhada à porta Base.
- Conecte o nó Clip com a animação de Aceno à porta Adicional.

Do nó Adicionar, conecte o conector de saída superior direito à porta de saída do Gráfico Pose.

- OPCIONALAtribua um parâmetro à sua variável Speed.
Clique e arraste a porta verde de Velocidade para uma área vazia. Um novo nó de parâmetro é exibido.

No canto superior esquerdo do editor de gráficos, use o painel de parâmetros para modificar rapidamente os parâmetros em seus nós. Você também pode acessar isso programaticamente.

Teste a animação pressionando o botão de play.

Tente testar vários pesos, velocidades, modos de reprodução e outras animações. Para mais informações sobre nós individuais, veja a referência de nós.
Integração de API
Criar e implantar um Gráfico de Animação segue o pipeline padrão de animação do Roblox. Após selecionar um rig no Editor de Gráficos de Animação, um novo ativo AnimationGraphDefinition é criado. Este ativo serve como o contêiner para seus nós, conexões e parâmetros. Uma vez que sua lógica esteja finalizada, você publica o gráfico para receber um ID de Ativo padrão.
Em seus scripts, você interage com esses gráficos carregando-os em um Animator como faria com uma animação tradicional. Para impulsionar a lógica interna do gráfico, use AnimationTrack:SetParameter() para passar valores em tempo real — como velocidade de movimento ou booleanos de estado — diretamente para as variáveis do gráfico.
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Seu ID de Gráfico Publicado
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- Atualizações dinâmicas de parâmetros via RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)Referência de Nós
Cada nó de gráfico de animação serve como uma porta lógica ou fonte de dados que processa dados de animação antes de chegar ao rig do personagem. Esta seção fornece uma análise técnica dos blocos funcionais dentro do Editor de Gráficos de Animação. Todos os nós atualmente produzem uma pose de animação.
Cada seção de nó inclui:
- Definição – Um resumo do propósito e papel do nó dentro do gráfico.
- Entradas – Os fluxos de dados que entram no nó. Múltiplas entradas são representadas como Input1, Input2, ..., InputN.
- Propriedades de entrada – Configurações ligadas diretamente a uma entrada específica (uma entrada Idle atribuída a uma Posição de 0.5 em um nó Blend1D).
- Dados de Evento – Eventos emitidos ou consumidos pelo nó para acionar a lógica interna do gráfico ou scripts Luau externos. Esse comportamento pode mudar ao longo do desenvolvimento beta.
Regras de evento global
Para todos os nós e transições, as seguintes regras se aplicam por padrão:
- Eventos se propagam para cima a partir de seu nó de origem através do gráfico. Cada evento carrega um peso representando a influência de sua origem na mistura final. Se o peso atingir zero em algum ponto, o evento é silenciado.
- Nós sem lógica de evento personalizada passam todos os eventos inalterados; nós que misturam ou selecionam entre entradas podem escalar o peso ou bloquear eventos de entradas não primárias (veja a seção de Evento por nó).
- Eventos de marcador que atingem o topo do gráfico podem ser observados via AnimationTrack:GetMarkerReachedSignal().
Clip

Uma referência a um ativo AnimationClip. Este serve como um nó folha no gráfico, gerando os dados brutos de animação que alimentam outros nós para mistura, seleção ou modificação.
- Entradas
- Nenhuma
- Propriedades
Propriedade Tipo Descrição AnimationId String O ativo de animação a ser reproduzido (por exemplo, rbxassetid://12345). PlayMode Enum.AnimationNodePlayMode Define o comportamento do clip uma vez que atinge o final de sua duração.
- Loop (padrão): Reinicia automaticamente do início uma vez que o clip termina.
- PingPong: Reproduz do início ao fim, e então imediatamente toca em reverso do fim ao início.
- OnceAndHold: Reproduz uma vez e mantém a pose final ao completar.
- OnceAndReset: Reproduz uma vez e retorna à pose inicial ao completar.
Reverse Boolean Controla a direção da reprodução. Speed Number Um multiplicador para a taxa de reprodução. 0.0 pausa o gráfico, 1.0 é a velocidade normal, e 2.0 é o dobro da velocidade. Trim Boolean Alterna se a duração do clip deve ser truncada. TrimStart Number O timestamp absoluto (em segundos) onde a reprodução deve começar. TrimEnd Number O timestamp absoluto (em segundos) onde a reprodução deve terminar. - Dados de Evento
- Manipulação de Evento: Nenhuma. Este é um nó folha sem filhos.
- Emissão de Evento: Lê marcadores personalizados embutidos no clip de animação (por exemplo, "Passo", "Golpe de Arma") e os emite como eventos nomeados no quadro preciso em que ocorrem. Se o clip for truncado, apenas marcadores dentro do intervalo definido [TrimStart, TrimEnd] (inclusivo) são emitidos.
Select

Seleciona entre qualquer número de entradas via a propriedade Selection. Sempre que a seleção atual muda, isso aciona uma nova transição.
- Entradas
- Input1...InputN
- Propriedades
Propriedade Tipo Descrição Selection String O ID único da entrada a ser selecionada, correspondendo ao nome da conexão de entrada (por exemplo, "Caminhar"). - Dados de Evento
- Manipulação de Evento: Eventos da entrada atualmente selecionada passam através com seu peso inalterado.
- Emissão de Evento: Passa por todos os eventos da entrada atualmente selecionada apenas. Durante uma transição, a emissão de eventos segue regras de evento global.
PrioritySelect

Avalia uma lista de entradas conectadas de cima para baixo e reproduz a primeira cuja condição avalia como verdadeira. Isso permite a seleção hierárquica de animação com base em lógica específica. Sempre que a seleção atual muda, isso aciona uma nova transição.
- Entradas
- Input1...InputN
- Trigger (Boolean): Uma condição lógica que deve ser verdadeira para que esta entrada seja ativada. Nas versões atuais, isso está ligado a um parâmetro booleano.
- TransitionOverrideInterruptible (Enum.AnimationNodeInterruptible): Define a regra para quando esta animação ativa pode ser interrompida por uma entrada de maior prioridade. Substitui a configuração DefaultInterruptible no nível do nó.
- Always (padrão): A entrada pode ser interrompida a qualquer momento por uma condição de maior prioridade.
- Finished: A animação atual deve completar sua reprodução antes que uma entrada de maior prioridade possa assumir.
- Trigger: A entrada só é interrompível quando o InterruptibleTrigger está definido como verdadeiro.
- InterruptibleTrigger (Boolean): Disponível apenas se TransitionOverrideInterruptible estiver definido como Trigger. A entrada pode ser interrompida quando esta expressão específica é verdadeira.
- Propriedades
Propriedade Tipo Descrição DefaultInterruptible Enum.AnimationNodeInterruptible A regra de interrupção básica aplicada a todas as entradas. Cada entrada pode substituir isso com sua própria propriedade de entrada TransitionOverrideInterruptible. - Dados de Evento
- Manipulação de Evento: Eventos da entrada atualmente selecionada passam através com seu peso inalterado.
- Emissão de Evento: Passa por todos os eventos da entrada atualmente selecionada apenas. Durante uma transição, a emissão de eventos segue regras de evento global.
Sequence

Ativa entradas conectadas em uma ordem sequencial específica com base em condições de espera definidas. Sempre que a seleção atual muda, isso aciona uma nova transição.
- Entradas
- Input1...InputN
- TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor): Especifica a condição que deve ser atendida antes que a sequência avance para a próxima entrada. Substitui a configuração DefaultWaitFor no nível do nó.
- Finished (padrão): Avança para a próxima entrada quando a entrada atual completa um ciclo. O comportamento de avanço depende da entrada conectada:
- Clip de reprodução única: Avança quando o clip termina.
- Clip em loop: Avança após um loop completo.
- Sequência com loops infinitos: Avança após um ciclo completo através de todas as entradas.
- Sequência com loops finitos: Avança após todos os loops serem completados.
- Trigger: Ativa a próxima entrada quando uma expressão lógica personalizada avalia como verdadeira.
- WaitForTrigger (Boolean): Disponível apenas quando TransitionOverrideWaitFor está definido como Trigger.
- Propriedades
Propriedade Tipo Descrição LoopCount Number O número de vezes que deve passar por toda a sequência. Um valor de 0 (padrão) indica um loop infinito. Uma vez que a contagem é alcançada, o nó respeita a configuração de loop ou hold da entrada final. DefaultWaitFor Enum.AnimationNodeWaitFor A condição de espera básica aplicada a todas as entradas. Cada entrada pode substituir isso com sua própria propriedade de entrada TransitionOverrideWaitFor. - Dados de Evento
- Manipulação de Evento: Eventos da entrada atualmente ativa passam através com seu peso inalterado.
- Emissão de Evento: Passa por todos os eventos da entrada atualmente ativa na sequência apenas. Durante uma transição, a emissão de eventos segue regras de evento global.
RandomSequence

Seleciona e reproduz uma de suas entradas conectadas aleatoriamente. Quando a animação atualmente selecionada é concluída, o nó escolhe aleatoriamente outra entrada para reproduzir. Atribua a cada entrada um peso específico para influenciar a probabilidade de ser escolhida. Sempre que a seleção atual muda, isso aciona uma nova transição.
- Entradas
- Input1...InputN
- Weight (Number): Determina a probabilidade desta entrada ser selecionada; pesos mais altos aumentam a chance de seleção.
- Propriedades
Propriedade Tipo Descrição PlayCount Number O número de entradas que o nó irá reproduzir antes de parar. Uma vez alcançado, o nó respeita a configuração de loop ou hold da entrada final. O padrão é 0 para infinito. Seed Number Um valor usado para inicializar o Gerador de Números Aleatórios (RNG), garantindo que a sequência permaneça consistente entre diferentes clientes. O padrão é -1 para Seed aleatório. - Dados de Evento
- Manipulação de Evento: Eventos da entrada atualmente ativa passam através com seu peso inalterado.
- Emissão de Evento: Passa por todos os eventos da entrada atualmente ativa na sequência apenas. Durante uma transição, a emissão de eventos segue regras de evento global.
Over

Sobrepõe a pose Over à pose Base. Quando combinado com um nó de Máscara, articulações mascaradas na pose Over revelam completamente a pose Base, criando um efeito de sobreposição transparente.
- Entradas
- Base: A camada de fundo ou inferior, tipicamente uma animação de corpo inteiro como locomoção ou um estado ocioso.
- Over: A camada de primeiro plano ou superior a ser aplicada sobre a base, como um gesto de mão ou animação de uso de ferramenta.
- Propriedades
Propriedade Tipo Descrição Weight Number O peso de mistura usado para atenuar a pose Over. O padrão é 1.0 (substituição total) e não é limitado. - Dados de Evento
- Manipulação de Evento:
- O nó escuta eventos de ambas as entradas Base e Over.
- Emissão de Evento:
- Eventos Base: Todos os eventos da entrada Base são passados sem modificação.
- Eventos Over: Eventos da entrada Over são escalados pela propriedade Weight.
- Com Weight 0.5, eventos Over se propagam com metade do peso.
- Com Weight 0, eles são silenciados.
Add

Adiciona a pose Adicional à pose Base, atenuada por um Peso específico (não limitado).
- Entradas
- Base: A pose de animação primária.
- Additive: A pose a ser sobreposta à base.
- Propriedades
Propriedade Tipo Descrição Weight Number Determina a força da pose aditiva aplicada à base. - Dados de Evento
- Manipulação de Evento: O nó escuta eventos de ambas as entradas Base e Additive.
- Emissão de Evento: Todos os eventos de ambas as entradas Base e Additive são passados sem modificação.
Subtract

Converte uma animação em uma pose aditiva subtraindo uma pose base relativa da pose alvo (). O Peso escala a pose B antes da subtração (não limitado).
- Entradas
- A: A pose de animação alvo.
- B: A pose base relativa a ser subtraída.
- Propriedades
Propriedade Tipo Descrição Weight Number Escala a pose B antes de ser subtraída de A. Com 1.0 (padrão), B é totalmente subtraída; com 0.0, nenhuma subtração ocorre. - Dados de Evento
- Manipulação de Evento: O nó escuta eventos de ambas Input A e Input B.
- Emissão de Evento: Todos os eventos de ambas Input A e Input B são passados sem modificação.
Blend1D

Interpolação linear entre as duas poses de animação mais próximas à posição de entrada atual em um único eixo.
- Entradas
- Input1...InputN
- Position (Number): A coordenada específica para cada entrada subsequente no eixo de mistura.
- Propriedades
Propriedade Tipo Descrição Position Number O valor ativo atual no eixo de mistura usado para amostrar as animações. Se Position estiver fora do intervalo de posições de entrada definidas, o nó extrapola usando as duas entradas mais próximas. PhaseSync Enum.AnimationNodePhaseSync Configura se o tempo das entradas filhas deve ser sincronizado.
- Sincronizado (padrão): Sincronização normalizada. O nó calcula uma "duração virtual" com base na média ponderada das entradas ativas. O passo de tempo de cada nó de entrada é ajustado para que todas as crianças converjam para a mesma fase, mantendo animações de diferentes comprimentos em sincronia.
- Não Sincronizado: Mistura padrão onde os clipes avançam independentemente em suas próprias taxas de reprodução.
- Dados de Evento
- Manipulação de Evento: O nó escuta eventos de todos os nós filhos atualmente ativos.
- Emissão de Evento: Apenas eventos da entrada ativa de maior peso se propagam, escalados pelo seu peso de mistura. Eventos da entrada secundária são silenciados.
Blend2D

Mistura múltiplas poses de animação com base em dois parâmetros de entrada dentro de um espaço de coordenadas 2D. Isso generaliza o nó Blend1D para lidar com cenários complexos, como mistura com base na direção e velocidade de movimento simultaneamente.
- Entradas
- Input1...InputN
- X (Number): A coordenada X para cada entrada subsequente.
- Y (Number): A coordenada Y para cada entrada subsequente.
- Propriedades
Propriedade Tipo Descrição InputMode Enum.AnimationNodeBlend2DInputMode Define o sistema de coordenadas usado para avaliar o espaço de mistura:
- Cartesiano (padrão): Usa coordenadas de grade 2D padrão. X e Y representam a posição atual dentro do espaço de mistura.
- Polar: Usa valores angulares e de magnitude. X representa a direção em radianos, enquanto Y representa a magnitude ou força do movimento. A direção é ponderada mais pesadamente do que a magnitude, então entradas em ângulos semelhantes, mas com magnitudes diferentes, se misturam mais suavemente do que entradas em ângulos diferentes.
X Number A coordenada X atual (Cartesiana) ou Direção em radianos (Polar). Y Number A coordenada Y atual (Cartesiana) ou Magnitude (Polar). PhaseSync Enum.AnimationNodePhaseSync Configura se o tempo das entradas filhas deve ser sincronizado.
- Sincronizado (padrão): Sincronização normalizada. O nó calcula uma "duração virtual" com base na média ponderada das entradas ativas. O passo de tempo de cada nó de entrada é ajustado para que todas as crianças converjam para a mesma fase, mantendo animações de diferentes comprimentos em sincronia.
- Não Sincronizado: Mistura padrão onde os clipes avançam independentemente em suas próprias taxas de reprodução.
- Dados de Evento
- Manipulação de Evento: O nó escuta eventos de todos os nós filhos atualmente ativos.
- Emissão de Evento: Apenas eventos da entrada ativa de maior peso se propagam, escalados pelo seu peso de mistura. Eventos da entrada secundária são silenciados.
Mask

Aplica uma máscara predefinida à Pose de entrada. Uma máscara é definida por um peso por objeto (por exemplo, articulação) na hierarquia do rig, permitindo controle preciso ou "desfoque" da animação.
- Entradas
- Pose: A pose de animação a ser mascarada.
- Propriedades
Propriedade Tipo Descrição Mask ObjectValue Um ObjectValue (criado como um filho direto da definição de nó de animação Mask) que define os pesos da máscara. Pode funcionar de duas maneiras:
- Diretamente: O ObjectValue em si contém atributos mapeando nomes de objetos do rig para valores de peso específicos.
- Por Referência: O ObjectValue referencia outra Instance que contém os atributos de mapeamento. Isso permite máscaras compartilhadas entre diferentes nós no gráfico.
Ao criar uma máscara, você pode escolher um esquema de rig (HumanoidRigDescription ou Picker) para preencher a hierarquia.
- HumanoidRigDescription: Padroniza a máscara para personagens humanoides.
- Picker: Permite ao usuário selecionar qualquer rig específico no espaço de trabalho para preencher a hierarquia da máscara.
Invert Boolean Quando verdadeiro, aplica valores de peso como 1 - peso. Isso permite reutilizar uma máscara inversamente sem criar um novo ativo. - Dados de Evento
- Manipulação de Evento: O nó escuta todos os eventos da entrada Pose.
- Emissão de Evento: Todos os eventos da entrada Pose são passados sem modificação.
Speed

Modifica a taxa de reprodução de uma pose de animação de entrada.
- Entradas
- Pose: A pose de animação ou subgráfico cuja velocidade de reprodução será modificada.
- Propriedades
Propriedade Tipo Descrição Speed Number Um multiplicador aplicado ao delta de tempo (). 0.0 pausa o gráfico, 1.0 é a velocidade normal, e 2.0 é o dobro da velocidade. - Dados de Evento
- Manipulação de Evento: O nó escuta eventos da entrada Pose.
- Emissão de Evento: Todos os eventos da entrada Pose são passados sem modificação. Note que, enquanto a velocidade de reprodução visual muda, o tempo dos eventos emitidos (como marcadores) será escalado de acordo com a taxa de reprodução modificada.
GraphOutput

Representa a pose final avaliada do gráfico. Este nó é automaticamente incluído em todos os novos gráficos no Editor de Gráficos de Animação. Sua presença garante que o gráfico seja sempre válido e produza consistentemente uma pose de animação.
- Entradas
- Pose: Os dados de animação processados finais a serem aplicados ao rig.
- Propriedades
- Nenhuma
- Dados de Evento
- Manipulação de Evento: O nó escuta todos os eventos passados pela entrada conectada final.
- Emissão de Evento: Este nó serve como o ponto de saída para o pipeline de animação e não emite sinais de volta para o gráfico.
Transições
Vários nós no Gráfico de Animação (como Select, Priority Select, Sequence e Random Sequence) gerenciam como as animações se misturam ao alternar entre entradas ativas. Para evitar redundância na referência de nós, esses comportamentos são definidos por grupos de propriedades de transição padronizadas.
Transição padrão

O comportamento de mistura básico aplicado ao nó sempre que ele muda para uma nova entrada ativa.
- DefaultTransitionDuration (número): O tempo (em segundos) que leva para misturar completamente na nova pose.
- DefaultTransitionCurve (Enum.PoseEasingStyle): A função de suavização aplicada durante a mistura. Atualmente, suporta apenas Enum.PoseEasingStyle.Linear e Enum.PoseEasingStyle.CubicV2.
Sobrescrever transição
Propriedades de link específicas de entrada que substituem a transição padrão. Estas são aplicadas quando o nó transita para essa entrada específica.
- TransitionOverrideDuration (número): Substitui a duração da transição padrão.
- TransitionOverrideCurve (Enum.PoseEasingStyle): Substitui a curva de transição padrão. Atualmente, suporta apenas Enum.PoseEasingStyle.Linear e Enum.PoseEasingStyle.CubicV2.
Replicação
Os parâmetros do gráfico de animação e o estado interno do nó se replicam automaticamente. O modo de replicação é determinado por Workspace.AuthorityMode no momento em que o script Animate é criado:
- Em Enum.AuthorityMode.Automatic: Parâmetros definidos via AnimationTrack:SetParameter() se replicam automaticamente para outros pares.
- Em Enum.AuthorityMode.Server: O servidor controla a simulação completa do gráfico. Todos os estados dos nós, como tempo decorrido para Enum.AnimationNodeType.ClipNode, e parâmetros do gráfico se replicam automaticamente do servidor para os clientes. O cliente do jogador proprietário usa previsão para reprodução local suave.
Exemplos de Scripts Animate
Para gerar scripts de exemplo para impulsionar um gráfico de animação para um rig, use Graph -> Create Animate script no Editor de Gráficos de Animação. Isso produz uma hierarquia de script colocada sob StarterCharacterScripts (para personagens de jogadores) ou diretamente no rig (para NPCs):
Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)O Animate ModuleScript contém a lógica de carregamento do gráfico. Os scripts RunClient e RunServer o invocam no contexto apropriado. Quais scripts são incluídos depende do caso de uso:
| Caso de Uso | Scripts Incluídos | Comportamento |
|---|---|---|
| NPC (qualquer modo) | RunServer | O servidor carrega e reproduz o gráfico. O estado se replica automaticamente para todos os clientes. |
| Jogador + Enum.AuthorityMode.Server | RunServer + RunClient | O servidor controla o gráfico de forma autoritária. O cliente proprietário ativa Enum.PredictionMode para previsão local baseada em rollback. |
| Jogador + Enum.AuthorityMode.Automatic | RunClient | O cliente proprietário carrega e reproduz o gráfico. Parâmetros se replicam automaticamente para o servidor e outros clientes. |
Os seguintes atributos são armazenados no script Animate e configuram seu comportamento:
| Atributo | Tipo | Descrição |
|---|---|---|
| GraphName | String | Nome do ativo do gráfico de animação. |
| CharacterName | String | Nome do rig que o gráfico visa. |
| SourceAssetId | String | O ID de Ativo publicado do gráfico. Usado em tempo de execução em jogos publicados. |
| IsServerAuthority | Boolean | Se o script foi criado com Workspace.AuthorityMode definido como Server. Determina a estratégia de replicação. |
| PreviewInStudio | Boolean | Quando verdadeiro (padrão), o teste de jogo no Studio carrega o gráfico não publicado localmente para que você possa iterar sem publicar. Defina como falso para testar o ativo publicado no Studio. Note que isso atualmente não é suportado em Enum.AuthorityMode.Server. |
Replicação de parâmetros em modo automático
Quando Workspace.AuthorityMode é Automático:
- O cliente proprietário controla os gráficos do personagem do jogador; o servidor controla os gráficos de NPC.
- Parâmetros definidos via AnimationTrack:SetParameter() são replicados automaticamente para outros pares. Múltiplas chamadas SetParameter dentro de um único quadro são coalescidas (último escritor vence).
- Nenhuma script adicional é necessária para o transporte de parâmetros — o motor lida com a replicação internamente.
- Outros clientes veem atualizações de parâmetros com um pequeno atraso (um intervalo de envio mais latência de rede).
Autoridade do servidor
Quando Workspace.AuthorityMode é Servidor:
- O servidor é autoritário para todos os gráficos — ele executa a simulação e replica o estado completo do gráfico.
- O que é replicado: Tanto parâmetros quanto estado interno do nó, incluindo tempo decorrido, seleções atuais, progresso de transição, contagens de loop e sementes de RNG. Isso garante que todos os clientes vejam um comportamento de animação idêntico.
- Personagens de jogadores: O servidor controla o gráfico. O script RunClient do cliente proprietário ativa automaticamente Enum.PredictionMode no Animator, para que o jogador local veja animação suave e prevista que se reconcilia com o servidor em caso de discrepância.
- NPCs: O servidor controla o gráfico exclusivamente; os clientes observam o estado replicado sem simulação local.
Impulsionando parâmetros
Use AnimationTrack:SetParameter() de cada script que executa o gráfico:
- NPC (qualquer modo): Chame SetParameter de RunServer (ou qualquer Script do servidor com acesso ao AnimationTrack).
- Personagem do jogador em Enum.AuthorityMode.Server: Chame SetParameter de ambos RunServer e RunClient. O servidor precisa de parâmetros para controlar a simulação autoritária, e o cliente proprietário precisa dos mesmos parâmetros para controlar sua previsão local.
- Personagem do jogador em Enum.AuthorityMode.Automatic: Chame SetParameter de RunClient (ou qualquer LocalScript do cliente com acesso ao AnimationTrack).
O script Animate gerado inclui um bloco SetParameter comentado como ponto de partida. Descomente e modifique-o para impulsionar parâmetros a partir do estado do jogo (velocidade de movimento, estado do humanoide, direção de entrada, etc.).