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.