Uma máquina de estado combina nós de animação em estados nomeados, como Parado, Andar, Correr e Pular. Ela reproduz o estado ativo e faz a transição para outro estado quando uma condição de transição é avaliada como true. Use uma máquina de estado para definir quais animações podem se seguir sem escrever lógica de transição em Luau.
Cada estado se conecta a uma entrada na máquina de estado. Um estado pode ser um clipe, um nó de mistura ou outra máquina de estado. A máquina de estado produz a pose de animação ativa ou uma mistura entre duas poses se estiver em transição, que você conecta ao próximo nó no gráfico.
Pré-requisitos
Antes de criar uma máquina de estado, familiarize-se com o Editor de Gráficos de Animação, incluindo como abri-lo e criar um gráfico de animação.
Criar uma máquina de estado
O exemplo a seguir usa três estados do JumpFallLandRunExample: Locomoção, Queda e AterrissarParado. O personagem se move normalmente, muda para uma animação de queda quando está no ar e reproduz uma animação de aterrissagem antes de voltar à locomoção. Esses passos se concentram na máquina de estado; comece com nós de animação para locomoção, queda e aterrissagem.
No Editor de Gráficos, clique com o botão direito e selecione Inserir Nó ⟩ Máquina de Estado.

No nó da máquina de estado, clique em Abrir. Na visualização da Máquina de Estado, use Criar Estado para adicionar três estados nomeados Locomoção, Queda e AterrissarParado.

Clique em Voltar para o Gráfico e conecte seus nós de animação às entradas correspondentes da máquina de estado:
- Locomoção: Conecte sua animação de locomoção. O gráfico de referência usa um Blend1DNode chamado IdleRunBlend para misturar animações de parado e correndo com base em Speed.
- Queda: Conecte um ClipNode de queda e defina Modo de Reprodução como Enum.AnimationNodePlayMode|OnceAndHold, para que mantenha sua pose final até que o personagem aterrisse.
- AterrissarParado: Conecte um clipe de aterrissagem e defina Modo de Reprodução como Enum.AnimationNodePlayMode|OnceAndHold, para que possa terminar e transitar de volta para a locomoção.
Conecte a saída da máquina de estado à entrada Pose de Saída do Gráfico.

Abra a visualização da Máquina de Estado novamente e arraste uma transição de (Entrada) para Locomoção. A máquina de estado começa neste estado quando o gráfico inicia.

Adicione um parâmetro booleano de gráfico chamado Grounded e defina como true. Este parâmetro indica se o personagem está no chão.
Adicione as seguintes transições arrastando uma conexão do estado de origem para o estado de destino e, em seguida, configure cada transição:
- Locomoção para Queda: Defina Aguardar como Expressão, Expressão como not Grounded, e Duração como 0.2 segundos. A animação de queda começa quando o personagem deixa o chão.
- Queda para AterrissarParado: Defina Aguardar como Expressão, Expressão como Grounded, e Duração como 0.1 segundos. A animação de aterrissagem começa quando o personagem toca o chão.
- AterrissarParado para Locomoção: Defina Aguardar como Finalizado, Quando como Enum.AnimationNodeTransitionWhen|BeforeFinished, e Duração como 0.2 segundos. A máquina de estado começa a misturar de volta para a locomoção durante os últimos 0.2 segundos da animação de aterrissagem.

Deixe a Curva como padrão (Linear) para todas as três transições. Visualize o gráfico e mude Grounded para false para entrar em Queda, depois de volta para true para reproduzir AterrissarParado e retornar à Locomoção.
Atualize Grounded a partir do seu código de jogabilidade à medida que o personagem sai e toca o chão. Se sua mistura de locomoção usar Speed, atualize esse parâmetro à medida que o personagem se move. Para o fluxo de parâmetros, consulte integração de API.
Estenda a máquina de estado com saltos e estados de aterrissagem adicionais para criar o gráfico de movimento completo. JumpFallLandRunExample inclui saltos separados para estar parado e correndo, além de diferentes aterrissagens com base na velocidade de movimento e queda.
Propriedades da máquina de estado
Propriedades do nó da máquina de estado
- Entradas
- State1...StateN: Os nós de animação que definem cada estado. O nome do estado deve corresponder ao nome da entrada do nó da máquina de estado.
- Propriedades
Propriedade Tipo Descrição EntryState ObjectValue Um ObjectValue cujo Value aponta para o AnimationNodeDefinition para o estado que está ativo quando o gráfico começa. - Dados de evento
- Manipulação de Eventos: Eventos do estado ativo passam através com seu peso inalterado.
- Emissão de Eventos: Passa através de eventos do estado ativo apenas. Durante uma transição, a emissão de eventos segue as regras de eventos globais.
Propriedades de transição
Uma transição tem um ou mais estados de origem, um estado de destino e uma condição. Quando o estado ativo corresponde a um estado de origem, a máquina de estado verifica a condição. Ela mistura para o estado de destino quando a condição é avaliada como true.
Aguardar determina a condição de transição da interface do usuário. Selecione Expressão (Enum.AnimationNodeWaitFor|Trigger) para exibir uma caixa de Expressão. Uma Expressão pode referenciar um parâmetro booleano de gráfico diretamente, como ShouldJump, ou avaliar uma condição, como Speed >= 12. Selecione Finalizado (Enum.AnimationNodeWaitFor|Finished) para exibir o dropdown Quando.
Se mais de uma transição tiver uma Expressão verdadeira, a máquina de estado avalia a transição com o maior valor de Prioridade primeiro. Quando as prioridades são as mesmas, ela seleciona uma transição aleatoriamente. Atribua prioridades diferentes a transições concorrentes para tornar o resultado previsível.
| Propriedade | Tipo | Descrição |
|---|---|---|
| De | ObjectValue | Um ObjectValue cujo Value aponta para o AnimationNodeDefinition para o estado que pode iniciar a transição. Deixe esta propriedade não definida para uma transição (Qualquer). |
| Para | ObjectValue | Um ObjectValue cujo Value aponta para o AnimationNodeDefinition para o estado de destino. |
| WaitFor | Enum.AnimationNodeWaitFor | Determina qual interface de condição de transição aparece. Enum.AnimationNodeWaitFor|Trigger exibe a caixa de Expressão. Enum.AnimationNodeWaitFor|Finished exibe o dropdown Quando. |
| Quando | Enum.AnimationNodeTransitionWhen | Disponível quando Aguardar é Finalizado. Selecione Enum.AnimationNodeTransitionWhen|Finished para começar após o estado de origem terminar, ou Enum.AnimationNodeTransitionWhen|BeforeFinished para começar a misturar um Duração antes do estado de origem terminar. |
| Expressão | String | Disponível quando Aguardar é Expressão. Um parâmetro booleano de gráfico ou expressão que, quando avaliada como true, inicia a transição. Consulte Expressão para o que é suportado. |
| Prioridade | Número | A ordem usada quando mais de uma Expressão é verdadeira. Valores mais altos têm precedência. Valores válidos variam de 0 a 65.535. |
| Duração | Número | O tempo, em segundos, para misturar no estado de destino. O padrão é 0.15 segundos. |
| Curva | Enum.PoseEasingStyle | A suavização usada durante a mistura. Apenas Linear e CubicV2 são suportados. O padrão é Linear. |