< Return to Video

Animator Scripting - Unity Official Tutorials

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

more » « less
Video Language:
English
Duration:
07:23

Portuguese, Brazilian subtitles

Revisions