-
Nesta lição iremos abordar
-
alguns dos usos mais comuns da classe Animator.
-
Para uma documentação completa da classe Animator
-
veja o link da documentação abaixo.
-
De modo a afetar as transições entre os estados
-
de um animator controller nos precisamos configurar
-
os parâmetros do Animator para valores apropriados.
-
Para fazer isso, precisamos usar algumas
-
funções da classe Animator.
-
Aqui nós temos uma cena com o modelo de Ethan.
-
Ethan tem um animator component
-
e um script chamado Ethan Script adcionado.
-
O componente animator esta usando um
-
controller chamado EthanController.
-
Se abrirmos EthanController
-
podemos ver que existem 4 estados.
-
Idle, Walk, Run e Jump.
-
Além disso, existem dois parâmetros.
-
Um flutuador chamado velocidade e um
-
trigger chamado Jump.
-
O controlador é configurado para
-
Ethan fazer uma transição de Idle para Walk
-
e Run executar com base na velocidade.
-
Além disso, se o parâmetro Jump for habilitado
-
quando Ethan estiver correndo Ethan vai entrar
-
em um estado Jump
-
Todas as animações do modelo Ethan
-
são controlados por estes dois parâmetros,
-
que vamos aprender a controlar
-
com nosso script de Ethan.
-
Dentro do Ethan Script primeiro nos temos que criar
-
uma variável animator chamada anim
-
para conter o nosso objeto animator.
-
Nós teremos uma referência a este objeto animator
-
no método start escrevendo
-
anim = getComponent <Animator>
-
Para obter mais detalhes sobre a função getComponent
-
veja a lição no link abaixo.
-
O nosso animator controller está configurado
-
para que o parametro speed diga
-
que a animação de movimento está reproduzindo.
-
Podemos usar o input do jogador
-
para controlar este comportamento.
-
A primeira coisa que precisamos fazer é
-
criar uma variável float chamada Move
-
no método update
-
Depois, vamos definir a variável Move
-
para ser igual ao eixo vertical de entrada
-
escrevendo Input.GetAxis
-
e entre parênteses nós vamos passar a string Vertical.
-
O que se segue é que queremos passar
-
o valor da variável Move ao
-
atributo Speed do animator controller.
-
Isto é feito com a função setFloat
-
da classe Animator.
-
Estamos usando setFloat ja que Speed
-
É um parâmetro float.
-
Se tivesse dado um parâmetro Booleano
-
se tivéssemos usado SetBool.
-
Se tivesse sido um parâmetro trigger tinhamos
-
utilizado SetTrigger e assim
-
Para cada uma destas funções
-
várias maneiras que podem ser chamados.
-
A forma mais comum é primeiro passar
-
o nome do parâmetro que está ajustando
-
como uma string.
-
Em seguida, o próximo elemento é o valor
-
que você deseja que o parámetro seja.
-
Neste caso, vamos chamar o
-
método SetFloat de nossa variável animator, digitando
-
anim.SetFloat
-
e, em seguida, em parênteses a string Speed
-
e nossa variável Move.
-
Devolta ao Unity podemos executar nossa cena.
-
Podemos ver que, se pressionar a tecla W
-
ou a seta para cima, o nosso modelo agora se move.
-
O parâmetro Speed e a animação de
-
movimento reproduzido agora é controlado pelo jogador.
-
Passe um nome string
-
para o parâmetro que desejamos pode ser ineficiente
-
já que significa que o animator precisa
-
avaliar a string de cada vez que é chamado.
-
A maneira mais rápida para definir os valores dos parâmetros
-
é utilizar hashIDs.
-
Cada string que o animator pode usar é
-
dado em um hashID.
-
Este é um valor inteiro que é único
-
para cada string diferente.
-
Podemos armazenar este valor e, em seguida,
-
definir os parâmetros usando esta ID em seu lugar.
-
Para fazer isso, primeiro precisamos
-
armazenar o valor.
-
vamos criar uma variável inteira chamada jumphash
-
para armazenar o Hashid.
-
Obtemos o valor para a nossa variável de hash
-
chamando o método estático do animator class
-
string to hash.
-
Como esse método é estático, podemos acessá-lo
-
escrevendo Animator.StringToHash.
-
Em parênteses passamos a string
-
que queremos saber o seu valor HashID:
-
A fim de fazer com que o nosso modelo salte
-
precisamos definir o parâmetro de Jump
-
do tipo trigger no animator controller.
-
No nosso caso, queremos fazer que o modelo salte
-
quando a barra de espaço é pressionado.
-
Então começamos escrevendo
-
if Input.GetKeyDown e, em seguida, entre parênteses
-
usaremos KeyCode.Space.
-
Dentro da nossa declaração if nós
-
estabeleceremos o parâmetro Jump do tipo trigger usando
-
o método anim.SetTrigger.
-
Dentro de parênteses e vamos ao
-
jumpHash passar nossa variável.
-
Lembre-se que esta variável contém o
-
hasID do nosso parâmetro Jump.
-
Note que Jump é um trigger
-
não temos de também passar esse valor.
-
Devolta ao Unity podemos executar nossa cena.
-
Note que quando estamos correndo também podemos
-
apertar a tecla de espaço para pular
-
Agora nós utilizamos ambos
-
parâmetros Speed do tipo float e
-
Jump do tipo trigger para fazer que nosso modelo
-
seja mais dinâmico.
-
Ocasionalmente, quando esta se escrevendo a lógica
-
por trás da animação nós queremos
-
encontrar em que estado o controller está.
-
Digamos por exemplo que nós queremos ser capazes
-
de ativar o trigger Jump quando o modelo
-
estiver no estado Run.
-
O animator tem algumas funções que podemos chamar
-
para encontrar em que estado o controller
-
está atualmente.
-
Nós podemos fazer isso criando
-
uma variavel animator state info
-
que chamaremos de StateInfo.
-
A classe animator state info
-
armazena o nome, nome hash,
-
e varias outras peças de informação
-
de estado.
-
Nós estabelecemos nossa variavel state info
-
igual a função anim.GetCurrentAnimatorStateInfo.
-
Dentro do parêntesis nós vamos passar o indice
-
do layer que queremos saber mais sobre.
-
dado que se trata da base layer
-
nós vamos colocar em 0.
-
Novamente nós podemos comparar o nome dos
-
estados de maquina atuais com o string
-
porque ja que é mais eficiente comparar
-
hashIDs faremos isso melhor.
-
Nós começaremos criando um inteiro chamado
-
runStateHash e configurando a que seja igual a nossa
-
função Animator.StringToHash.
-
Nós vamos passar em parentesis
-
o string base layer .Run
-
nós temos que incluir a base layer.part
-
já que podemos ter estados com o mesmo nome
-
em diferentes layers.
-
Agora nós podemos modificar nossa declaração if
-
para tambem unicamente permitir nosso modelo saltar
-
si stateInfo.nameHash
-
é igual a nossa variável runStateHash.