Como evitar espaguete no animador?

9

Estou trabalhando com animações no Unity e até agora fiz apenas quatro (Up Down Left e Right) e minha janela de animação parece seguir ... insira a descrição da imagem aqui

O problema é que, se eu estava subindo, quero que o herói fique olhando para cima não vá para "ponto morto neutro" (ou como ele começou), mas isso significa que tenho quatro posições ociosas ... e cada uma delas pode fazer a transição para cima, baixo , Esquerda ou Direita e eles vão exponencialmente a cada ação adicional ...

O que me faz sentir que estou fazendo algo errado ...

Existe uma maneira melhor de fazer transições entre ações diferentes?

Matas Vaitkevicius
fonte
Eu tenho tentado fazer isso por um longo tempo. Infelizmente, minha conclusão é que você simplesmente não pode. O Animator SEMPRE se transforma em uma teia de espaguete e temos que conviver com ela. Dê uma olhada neste vídeo, porém, ele ajuda youtube.com/...
o Nevermind

Respostas:

9

Você pode resolver esse tipo de problema com o BlendTrees (em geral, é uma boa idéia confiar frequentemente em árvores de mistura). A árvore de mesclagem é um tipo de estado de multi-animação que, com base em um parâmetro (flutuante), decide qual das animações que ela contém está ativa no momento (ou a animação resultante pode ser uma mistura de várias animações). Mesmo quando as animações não são combinadas, mas trocadas, a troca ocorre no meio da animação (ou seja, se a animação "existente" estiver em 35%, a nova será reproduzida de 35% em diante). Do lado de fora, tudo isso está oculto como se fosse um estado simples / único.

Por exemplo, você tem uma árvore de mesclagem com 8 animações de sprite (inativa com 4 direções principais e 4 na diagonal). Existem 2 parâmetros nessa árvore de mistura - "horizontal" e "vertical". E com base nesses 2 parâmetros, a árvore de mistura decidirá qual animação reproduzir. Com base no parâmetro "horizontal", a árvore de mesclagem escolherá entre animação esquerda / direita e o parâmetro "vertical" decidirá a animação de cima para baixo. Então, quando combinadas, você terá todas as 8 animações com diagonais (é a mesma idéia que está por trás dos joypads / joysticks).

insira a descrição da imagem aqui

É um pouco confuso, portanto, mesmo que o StackExchange não goste de links, vincularemos um pequeno exemplo de vídeo que fiz. Observe a parte superior direita da tela. Os pontos cinzas são os "estados" / animações e o ativo é aquele que fecha o ponto vermelho. Como dito no começo, pode ser ainda mais complexo e cada animação tem uma influência / força com base em sua distância do ponto vermelho, resultando em uma mistura entre várias animações.

Do lado de fora, é apenas um estado (árvore de mistura) e quando você aplica o mesmo conceito para andar e atacar, você terá apenas 3 estados vinculados.

As árvores de mesclagem são criadas com o botão direito do mouse em uma área vazia do Animator Criar estado -> a partir da nova árvore de mesclagem. De lá, está tudo no inspetor. Com a árvore de mistura selecionada, você pode escolher o tipo da árvore de mistura (1D, 2D, etc.), adicionar animações, posicioná-las (em relação aos valores dos parâmetros) e selecionar os parâmetros de controle.

Se você quiser obter mais informações sobre o Blend Trees, a seguir, vídeos do Unity - Unite 2016 e Unity Tutorials .

Nikaas
fonte
2

O problema aqui é que você está tentando unir tudo, em vez de usar um gatilho para alternar entre inativos. Você deve escolher a animação inativa usando um tipo de condicional if-else ou switch-case. Eu fiz um diagrama que parece muito mais organizado (suponha que um deles seja o caso padrão):

insira a descrição da imagem aqui

Informação adicional:

Dê uma olhada em Parâmetros de animação sobre como definir parâmetros para o animador reconhecer, Máquinas de estado para combinar animações, Comportamentos de máquina de estado para saber como verificar as variáveis ​​que você definiu.

John Hamilton
fonte
Oi John, mas como eu realmente faço isso? Por que eu usaria o gatilho para alternar entre inativos ou alternar entre inativos? como eu escolho animaton ocioso usando se mais? Também no diagrama, por que eu mudaria para a esquerda e depois para a esquerda e não para a esquerda e entraria na esquerda à espera da próxima ação, ou isso deveria ser o contrário?
Matas Vaitkevicius
@MatasVaitkevicius Você pode definir e verificar variáveis ​​no final ou no início das animações. Você pode criar uma animação vazia que não faz nada além de verificar o caso e depois redirecioná-lo para a próxima parte ou criar uma camada de abstração. Incluí alguns links para os manuais para obter mais informações.
John Hamilton
Então, como faço se mais com parâmetros que alternariam as transições? Não há exemplo de todos os mecanismos que você ligados apenas fazer a transição manual de como eu fiz na pergunta ....
Matas Vaitkevicius
@MatasVaitkevicius Você realmente deve procurar um pouco primeiro: gamedev.stackexchange.com/questions/103611/…
John Hamilton
Mas é assim que eu fiz. acionar disparos em ação e iniciar a animação, em seguida, ela fica ociosa para essa direção ... Agora, o que você está dizendo (se eu entendi direito) que eu poderia após a animação, em vez de ficar ociosa nessa direção, vá para mudar o mecanismo que escolheria ocioso apropriado para mim ... mas eu não vi tal qualquer mecanismo, você pode copiá-lo em sua resposta por favor ....
Matas Vaitkevicius