*= jumpAnimationSpeedModifier; var jumpFall = animation["Small Fall"]; jumpFall.layer = jumpingLayer; var freeFall = animation["Fall"]; freeFall.layer = afterJumpLayer; var fallImpact = animation["Floor Impact"]; fallImpact.layer = afterJumpLayer; fallImpact.speed *= 3; var fallGetUp = animation["Get Up"]; fallGetUp.layer = afterJumpLayer; fallGetUp.speed *= 0.95; var stayJumping = animation["Stay Jumping"]; stayJumping.layer = afterJumpLayer; var jumpLanding = animation["Landing"]; jumpLanding.layer = afterJumpLayer; jumpLanding.speed *= jumpLandAnimationSpeedModifier*2.5; var jumpLand = animation["Landed"]; jumpLand.layer = jumpingLayer; jumpLand.speed *= jumpLandAnimationSpeedModifier; var run = animation["Run"]; run.speed *= runAnimationSpeedModifier; var walk = animation["Walk"]; walk.speed *= walkAnimationSpeedModifier; var sneak = animation["Sneak"]; sneak.speed *= sneakAnimationSpeedModifier; var getDown = animation["Get Down"]; getDown.speed *= getDownAnimationSpeedModifier; var smallImpact = animation["Small Impact"]; smallImpact.layer = afterJumpLayer;} Note que este bloco de codigo apenas inicializa as variaveis com os valores desejados. Isso poderia ser feito em qualquer ponto fora da funcao Start(), mas como queremos ter certeza de que as variaveis serao inicializadas antes que qualquer loop comece a rodar, inicializamos as variaveis desta forma.6.6 Trabalhando com Animacoes nao ProceduraisTrabalhar com animacoes nao procedurais e relativamente simples, entao tudo que precisamos e de um punhado de acoes e reacoes controlados por mais um punhado de estruturas baseadas em Cases ou Ifs. Com nossas variaveis inicializadas, so nos resta implementar os resultados no personagem durante a execucao do game, entao devemos trabalhar na funcao Update(). Antes disso, criaremos algumas co-rotinas que podem auxiliar algumas tarefas durante a execucao das animacoes:? 1234567891011121314151617181920212223242526272829303132333435363738 function DidJump() { animation.Play("Jump"); animation.PlayQueued("Small Fall"); yield WaitForSeconds(0.225); if (Input.GetButton("Jump")) { animation.CrossFade("Stay Jumping"); } else { if (GetComponent(PlayerController).isFalling == false) { animation.CrossFade("Small Fall"); } else { animation.Play("Fall"); } } yield WaitForSeconds(0.015); GetComponent(PlayerController).canControl = false;}function DidLand() { if (GetComponent(PlayerController).isFalling == false) { if (animation.IsPlaying("Stay Jumping")) { animation.Play("Landing"); } else { animation.CrossFade("Landed"); } yield WaitForSeconds(0.15); GetComponent(PlayerController).canControl = true; } else { animation.CrossFade("Floor Impact"); animation.CrossFade("Get Up"); GetComponent(PlayerController).isFalling = false; yield WaitForSeconds(0.15); GetComponent(PlayerController).canControl = true; }} Sobre a funcao DidJump(): Esta funcao sera utilizada pelo script PlayerController que criaremos logo depois. Basicamente, essa funcao checa o estado da animacao atual e executa a animacao desejada assim que o script PlayerController decidir que e o momento certo para estas animacoes serem executadas.Sobre a funcao DidLand(): Sempre que o script PlayerController detectar que o personagem pousou de um salto ou caiu em algum lugar, ele ira enviar uma mensagem para este script dizendo que o personagem acabou de atingir o solo e a animacao de pouso deve ser tocada.Ao salvar seu script, neste ponto a Unity vai estar se indagando o que viria a ser o componente PlayerController. Este e um script que ainda nao criamos, por isso seu codigo ainda nao funciona, mas agora precisamos definir a funcao Update() e entao podemos partir para o script que a Unity acusa estar faltando.6.7 Editando a funcao UpdateNa funcao Update() nos continuamos o trabalho com as animacoes, mas com a diferenca de que nao podera ser usada nenhuma funcao Yield aqui:? 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 function Update() { if (GetComponent(PlayerController).GetHangTime() < hangTimeUntilFallingAnimation) { if (GetComponent(PlayerController).headsUp == false) { if (GetComponent(PlayerController).IsMoving()) { if (Input.GetButton("Action A")) { if (GetComponent(PlayerController).isSneaking != true) { animation.CrossFade ("Run"); } else { animation.CrossFade("Sneak"); } } else { if(Input.GetAxis("Vertical") <= -0.25) { animation.CrossFade("Sneak");