void Update() { if (RunTimePotion <= Time.time && UsingPotion == true) { PotionShieldEnd(); PotionLuckEnd(); TimePotionEnd(); } if (UsingPotion == true) { fillValueTest = Mathf.Clamp(RunTimePotion - Time.time, 0, CurrentPotion.Duration); expfillamount.fillAmount = fillValueTest / CurrentPotion.Duration; } if (Vidas <= 0) { } // Detectando movimento em vector 2D Mov = new Vector2( Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical") ); // Estabelecendo as animacoes if (Mov != Vector2.zero) { anim.SetFloat("movX", Mov.x); anim.SetFloat("movY", Mov.y); anim.SetBool("Walking", true); } else { anim.SetBool("Walking", false); } //Buscamos o estado atual conferindo a informação da animação de ataque no animator. AnimatorStateInfo stateInfo = anim.GetCurrentAnimatorStateInfo(0); bool attacking = stateInfo.IsName("Arthur_Attack"); //Detectamos o Ataque do personagem, o ataque têm prioridade e por isto o código é colocado por último. if ((Input.GetKeyDown("space") && !attacking) || ((Input.GetKeyDown(KeyCode.Mouse0) && !attacking))) { /* -------> Essa linha apenas permite que o jogador * realize a animação de ataque caso a tecla espaço for pressionada, e além disso, só permite a execução da * animação caso o jogador não esteja com esta animação de ataque sendo executada no exato momento que ele * pressionar a tecla espaço. (Por esse motivo aquela parte "&& !attacking" */ if (sword.Sword_CurrentDamage != 0) { anim.SetTrigger("Attacking"); AudioManager.instancia.PlaySFX(AudioManager.instancia.attackClip); } else { Hud_Menu HudMenu = GameObject.FindGameObjectWithTag("Area").GetComponent <Hud_Menu>(); HudMenu.ArmaEquipada(); } } // Com isso abaixo nós vamos ficar atualizando a posição X e Y da colisão do ataque do personagem para // que ele se ajuste á direção que o jogador está virado no momento atual da jogatina. // O colisor do ataque será a região onde o jogador vai causar dano nos objetos e inimigos que estiverem ali. if (Mov != Vector2.zero) { attackCollider.offset = new Vector2(Mov.x / 3, Mov.y / 3); } /* É aqui que nós vamos ativar o collider quando a animação do ataque estiver sendo executada. * Isso vai fazer uma checagem a cada frame, visto que estamos escrevendo o código dentro da "Void Update". * Em resumo, essa checagem faz com que quando a animação de ataque já tiver começado, o collider do ataque * só fique LIGADO enquanto o tempo de execução da animação for maior que 20% do tempo total dela, e enquanto * o tempo da animação for menor que 70% do tempo total, fazendo com que ANTES de 20% e APÓS 70% do tempo que * a execução da animação levar, o collider fique DESLIGADO. * * Isso serve pra justificar o fato do ataque do personagem causar dano nos inimigos, dando mais realismo para * o jogo, visto que se nós permitirmos que o collider fique ativo durante todo o tempo de execução da animação, * o ataque também vai funcionar mesmo nos primeiros e nos últimos frames da animação, mas os primeiros frames * são onde o jogador ainda estará "sacando" a espada pra realizar o ataque e nos últimos frames ele já está com * a espada parada após realizar o corte com a lâmina, então não faz sentido que esse tempo também seja levado em * conta na hora de aplicar o dano nos inimigos e nos objetos. * * Isso também impede que o jogador fique dedilhando a tecla espaço fazendo com que a direção que ele esteja * olhando se torne uma área onde o dano seja sempre constante */ if (attacking) { float PlaybackTime = stateInfo.normalizedTime; if (PlaybackTime > 0.2 && PlaybackTime < 0.7) { attackCollider.enabled = true; } else { attackCollider.enabled = false; // print("nao atacou"); } } if (Input.GetKeyDown(KeyCode.R) && magic.MagiaAtual != "") { // if (magic.MagiaAtual == "Fogo") // { // // cooldown.CoolDownMagia(); // print("a"); // // } // else if (magic.MagiaAtual == "Floresta") // { // cooldown.CoolDownMagia(); // print("b"); // } cooldown.CoolDownMagia(magic.MagiaAtual); } }