WEBVTT 00:00:00.470 --> 00:00:02.445 Nesta lição iremos abordar 00:00:02.445 --> 00:00:05.542 alguns dos usos mais comuns da classe Animator. 00:00:06.097 --> 00:00:09.100 Para uma documentação completa da classe Animator 00:00:09.100 --> 00:00:11.519 veja o link da documentação abaixo. 00:00:12.723 --> 00:00:15.295 De modo a afetar as transições entre os estados 00:00:15.295 --> 00:00:17.781 de um animator controller nos precisamos configurar 00:00:17.781 --> 00:00:20.393 os parâmetros do Animator para valores apropriados. 00:00:20.875 --> 00:00:23.192 Para fazer isso, precisamos usar algumas 00:00:23.192 --> 00:00:25.468 funções da classe Animator. 00:00:26.396 --> 00:00:29.871 Aqui nós temos uma cena com o modelo de Ethan. 00:00:30.495 --> 00:00:32.635 Ethan tem um animator component 00:00:32.635 --> 00:00:35.920 e um script chamado Ethan Script adcionado. 00:00:36.959 --> 00:00:39.373 O componente animator esta usando um 00:00:39.373 --> 00:00:41.373 controller chamado EthanController. 00:00:41.873 --> 00:00:43.873 Se abrirmos EthanController 00:00:43.873 --> 00:00:46.277 podemos ver que existem 4 estados. 00:00:46.277 --> 00:00:49.586 Idle, Walk, Run e Jump. 00:00:50.625 --> 00:00:53.281 Além disso, existem dois parâmetros. 00:00:53.281 --> 00:00:55.225 Um flutuador chamado velocidade e um 00:00:55.225 --> 00:00:57.225 trigger chamado Jump. 00:00:57.960 --> 00:01:00.435 O controlador é configurado para 00:01:00.435 --> 00:01:03.153 Ethan fazer uma transição de Idle para Walk 00:01:03.153 --> 00:01:05.978 e Run executar com base na velocidade. 00:01:06.647 --> 00:01:09.626 Além disso, se o parâmetro Jump for habilitado 00:01:09.626 --> 00:01:12.226 quando Ethan estiver correndo Ethan vai entrar 00:01:12.226 --> 00:01:13.837 em um estado Jump 00:01:15.071 --> 00:01:17.293 Todas as animações do modelo Ethan 00:01:17.293 --> 00:01:19.473 são controlados por estes dois parâmetros, 00:01:19.473 --> 00:01:21.110 que vamos aprender a controlar 00:01:21.110 --> 00:01:23.110 com nosso script de Ethan. 00:01:24.397 --> 00:01:27.419 Dentro do Ethan Script primeiro nos temos que criar 00:01:27.419 --> 00:01:30.357 uma variável animator chamada anim 00:01:30.357 --> 00:01:32.550 para conter o nosso objeto animator. 00:01:33.327 --> 00:01:35.957 Nós teremos uma referência a este objeto animator 00:01:35.957 --> 00:01:38.624 no método start escrevendo 00:01:38.624 --> 00:01:42.805 anim = getComponent <Animator> 00:01:43.719 --> 00:01:47.007 Para obter mais detalhes sobre a função getComponent 00:01:47.007 --> 00:01:49.007 veja a lição no link abaixo. 00:01:49.977 --> 00:01:52.214 O nosso animator controller está configurado 00:01:52.214 --> 00:01:54.409 para que o parametro speed diga 00:01:54.409 --> 00:01:57.035 que a animação de movimento está reproduzindo. 00:01:57.682 --> 00:01:59.682 Podemos usar o input do jogador 00:01:59.682 --> 00:02:01.319 para controlar este comportamento. NOTE Paragraph 00:02:02.182 --> 00:02:04.100 A primeira coisa que precisamos fazer é 00:02:04.100 --> 00:02:06.597 criar uma variável float chamada Move 00:02:06.597 --> 00:02:08.154 no método update 00:02:09.636 --> 00:02:12.165 Depois, vamos definir a variável Move 00:02:12.165 --> 00:02:14.500 para ser igual ao eixo vertical de entrada 00:02:14.500 --> 00:02:17.645 escrevendo Input.GetAxis 00:02:17.645 --> 00:02:21.347 e entre parênteses nós vamos passar a string Vertical. 00:02:22.496 --> 00:02:24.496 O que se segue é que queremos passar 00:02:24.496 --> 00:02:26.496 o valor da variável Move ao 00:02:26.496 --> 00:02:29.402 atributo Speed do animator controller. 00:02:30.164 --> 00:02:32.788 Isto é feito com a função setFloat 00:02:32.788 --> 00:02:34.788 da classe Animator. 00:02:35.661 --> 00:02:38.381 Estamos usando setFloat ja que Speed 00:02:38.381 --> 00:02:40.381 É um parâmetro float. 00:02:40.381 --> 00:02:42.381 Se tivesse dado um parâmetro Booleano 00:02:42.381 --> 00:02:44.381 se tivéssemos usado SetBool. 00:02:44.381 --> 00:02:46.784 Se tivesse sido um parâmetro trigger tinhamos 00:02:46.784 --> 00:02:49.443 utilizado SetTrigger e assim 00:02:50.513 --> 00:02:52.375 Para cada uma destas funções 00:02:52.375 --> 00:02:54.375 várias maneiras que podem ser chamados. 00:02:54.875 --> 00:02:56.875 A forma mais comum é primeiro passar 00:02:56.875 --> 00:02:59.000 o nome do parâmetro que está ajustando 00:02:59.000 --> 00:03:00.630 como uma string. 00:03:00.630 --> 00:03:02.781 Em seguida, o próximo elemento é o valor 00:03:02.781 --> 00:03:04.781 que você deseja que o parámetro seja. 00:03:05.640 --> 00:03:08.125 Neste caso, vamos chamar o 00:03:08.125 --> 00:03:11.117 método SetFloat de nossa variável animator, digitando 00:03:11.117 --> 00:03:13.117 anim.SetFloat 00:03:13.617 --> 00:03:16.735 e, em seguida, em parênteses a string Speed 00:03:16.735 --> 00:03:18.735 e nossa variável Move. 00:03:19.622 --> 00:03:22.400 Devolta ao Unity podemos executar nossa cena. 00:03:22.400 --> 00:03:24.400 Podemos ver que, se pressionar a tecla W 00:03:24.400 --> 00:03:27.594 ou a seta para cima, o nosso modelo agora se move. 00:03:27.594 --> 00:03:29.594 O parâmetro Speed e a animação de 00:03:29.594 --> 00:03:33.249 movimento reproduzido agora é controlado pelo jogador. 00:03:34.343 --> 00:03:35.942 Passe um nome string 00:03:35.942 --> 00:03:38.479 para o parâmetro que desejamos pode ser ineficiente 00:03:38.479 --> 00:03:40.410 já que significa que o animator precisa 00:03:40.410 --> 00:03:43.203 avaliar a string de cada vez que é chamado. 00:03:43.725 --> 00:03:45.725 A maneira mais rápida para definir os valores dos parâmetros 00:03:45.725 --> 00:03:47.725 é utilizar hashIDs. 00:03:48.225 --> 00:03:50.225 Cada string que o animator pode usar é 00:03:50.225 --> 00:03:52.057 dado em um hashID. 00:03:52.057 --> 00:03:54.197 Este é um valor inteiro que é único 00:03:54.197 --> 00:03:55.737 para cada string diferente. 00:03:56.237 --> 00:03:58.237 Podemos armazenar este valor e, em seguida, 00:03:58.237 --> 00:04:00.811 definir os parâmetros usando esta ID em seu lugar. 00:04:01.621 --> 00:04:03.760 Para fazer isso, primeiro precisamos 00:04:03.760 --> 00:04:05.525 armazenar o valor. 00:04:05.525 --> 00:04:08.656 vamos criar uma variável inteira chamada jumphash 00:04:08.656 --> 00:04:10.656 para armazenar o Hashid. 00:04:11.198 --> 00:04:13.198 Obtemos o valor para a nossa variável de hash 00:04:13.198 --> 00:04:16.208 chamando o método estático do animator class 00:04:16.208 --> 00:04:18.208 string to hash. 00:04:18.208 --> 00:04:21.019 Como esse método é estático, podemos acessá-lo 00:04:21.019 --> 00:04:25.358 escrevendo Animator.StringToHash. 00:04:26.286 --> 00:04:28.915 Em parênteses passamos a string 00:04:28.915 --> 00:04:31.567 que queremos saber o seu valor HashID: 00:04:32.506 --> 00:04:34.506 A fim de fazer com que o nosso modelo salte 00:04:34.506 --> 00:04:36.870 precisamos definir o parâmetro de Jump 00:04:36.870 --> 00:04:38.870 do tipo trigger no animator controller. 00:04:39.370 --> 00:04:41.871 No nosso caso, queremos fazer que o modelo salte 00:04:41.871 --> 00:04:43.871 quando a barra de espaço é pressionado. 00:04:44.371 --> 00:04:46.123 Então começamos escrevendo 00:04:46.123 --> 00:04:51.302 if Input.GetKeyDown e, em seguida, entre parênteses 00:04:51.302 --> 00:04:54.736 usaremos KeyCode.Space. 00:04:55.775 --> 00:04:58.135 Dentro da nossa declaração if nós 00:04:58.135 --> 00:05:00.774 estabeleceremos o parâmetro Jump do tipo trigger usando 00:05:00.774 --> 00:05:03.257 o método anim.SetTrigger. 00:05:03.923 --> 00:05:05.923 Dentro de parênteses e vamos ao 00:05:05.923 --> 00:05:07.923 jumpHash passar nossa variável. 00:05:09.017 --> 00:05:11.017 Lembre-se que esta variável contém o 00:05:11.017 --> 00:05:13.768 hasID do nosso parâmetro Jump. 00:05:14.567 --> 00:05:16.774 Note que Jump é um trigger 00:05:16.774 --> 00:05:19.213 não temos de também passar esse valor. 00:05:20.351 --> 00:05:22.893 Devolta ao Unity podemos executar nossa cena. 00:05:23.666 --> 00:05:26.209 Note que quando estamos correndo também podemos 00:05:26.209 --> 00:05:28.209 apertar a tecla de espaço para pular 00:05:29.096 --> 00:05:31.096 Agora nós utilizamos ambos 00:05:31.096 --> 00:05:33.096 parâmetros Speed do tipo float e 00:05:33.096 --> 00:05:35.716 Jump do tipo trigger para fazer que nosso modelo 00:05:35.716 --> 00:05:36.989 seja mais dinâmico. 00:05:37.843 --> 00:05:40.146 Ocasionalmente, quando esta se escrevendo a lógica 00:05:40.146 --> 00:05:42.271 por trás da animação nós queremos 00:05:42.271 --> 00:05:45.017 encontrar em que estado o controller está. 00:05:45.986 --> 00:05:47.986 Digamos por exemplo que nós queremos ser capazes 00:05:47.986 --> 00:05:50.153 de ativar o trigger Jump quando o modelo 00:05:50.153 --> 00:05:52.153 estiver no estado Run. 00:05:52.653 --> 00:05:55.495 O animator tem algumas funções que podemos chamar 00:05:55.495 --> 00:05:57.495 para encontrar em que estado o controller 00:05:57.495 --> 00:05:59.008 está atualmente. 00:05:59.677 --> 00:06:01.872 Nós podemos fazer isso criando 00:06:01.872 --> 00:06:04.243 uma variavel animator state info 00:06:04.243 --> 00:06:06.813 que chamaremos de StateInfo. 00:06:07.641 --> 00:06:10.045 A classe animator state info 00:06:10.045 --> 00:06:12.443 armazena o nome, nome hash, 00:06:12.443 --> 00:06:14.443 e varias outras peças de informação 00:06:14.443 --> 00:06:15.839 de estado. 00:06:17.675 --> 00:06:19.911 Nós estabelecemos nossa variavel state info 00:06:19.911 --> 00:06:24.830 igual a função anim.GetCurrentAnimatorStateInfo. 00:06:25.703 --> 00:06:28.838 Dentro do parêntesis nós vamos passar o indice 00:06:28.838 --> 00:06:31.253 do layer que queremos saber mais sobre. 00:06:31.253 --> 00:06:33.406 dado que se trata da base layer 00:06:33.406 --> 00:06:35.406 nós vamos colocar em 0. 00:06:36.086 --> 00:06:38.086 Novamente nós podemos comparar o nome dos 00:06:38.086 --> 00:06:40.703 estados de maquina atuais com o string 00:06:40.703 --> 00:06:42.425 porque ja que é mais eficiente comparar 00:06:42.425 --> 00:06:45.019 hashIDs faremos isso melhor. 00:06:46.044 --> 00:06:48.044 Nós começaremos criando um inteiro chamado 00:06:48.044 --> 00:06:51.200 runStateHash e configurando a que seja igual a nossa 00:06:51.200 --> 00:06:54.151 função Animator.StringToHash. 00:06:54.872 --> 00:06:57.023 Nós vamos passar em parentesis 00:06:57.023 --> 00:07:00.243 o string base layer .Run 00:07:01.434 --> 00:07:04.212 nós temos que incluir a base layer.part 00:07:04.212 --> 00:07:06.544 já que podemos ter estados com o mesmo nome 00:07:06.544 --> 00:07:08.146 em diferentes layers. 00:07:08.947 --> 00:07:11.672 Agora nós podemos modificar nossa declaração if 00:07:11.672 --> 00:07:13.910 para tambem unicamente permitir nosso modelo saltar 00:07:13.910 --> 00:07:17.140 si stateInfo.nameHash 00:07:17.140 --> 00:07:21.140 é igual a nossa variável runStateHash.