/// <summary> /// Reseta as animações, volta ao estado de movimento /// </summary> public void RestearAnimassaum() { atacando = false; if (estadoPernas != EstadosPersonagem.Movimento) { estadoPernas = EstadosPersonagem.Movimento; } if (estadoTorso != EstadosPersonagem.Movimento) { estadoTorso = EstadosPersonagem.Movimento; } }
public override void SofrerDano(float dano) { base.SofrerDano(dano); if (morrido == true) { meuAnimator.SetTrigger("Morrendo"); estadoPernas = EstadosPersonagem.Morrendo; estadoTorso = EstadosPersonagem.Morrendo; GetComponent <CapsuleCollider>().enabled = false; DroparItem(); Player.SetExperiencia(Experiencia); Destroy(gameObject, 5); } }
// Update is called once per frame void Update() { if (morrido == false) { MovimentoAI(); MudarAnimassaum(); PlayerDead = Player.estaMorto(); } else { estadoPernas = EstadosPersonagem.Morrendo; estadoTorso = EstadosPersonagem.Morrendo; meuAgente.SetDestination(transform.position); MudarAnimassaum(); } }
/// <summary> /// Cuida da movimentação da IA do esqueleto /// </summary> public void MovimentoAI() { //Velocidade do navmesh agent float velocidadeAtual = meuAgente.velocity.sqrMagnitude; //Velocidade entre 0 e 1 para modificar a animação de andar movimentoSpeed = velocidadeAtual / velocidadeMax; //Verifica se a movimentação é diferente de 0, se for muda os estados para movimento! //Que são lidos pelo metodo mudar animassaum. if (movimentoSpeed != 0) { estadoPernas = EstadosPersonagem.Movimento; estadoTorso = EstadosPersonagem.Movimento; } //Define o destino atual Vector3 destino = Waypoints[waypointAtual].position; //Distancia entre o inimigo e o destino float distancia = Vector3.Distance(transform.position, destino); //Distancia do inimigo e o player float distanciaPlayer = Vector3.Distance(transform.position, Player.transform.position); //Verifica se a distancia do waypoint é menor que a do alvo //Se for, quer dizer que o inimigo chegou no destino if (distancia <= distanciaDoAlvo) { //Aumenta o waypoint para 1 waypointAtual += 1; //Se chegar no último waypoint, começa do começo, ou seja 0 if (waypointAtual >= Waypoints.Count) { waypointAtual = 0; } } //Verifica se o esqueleto está perto do Player //Se não, continua seguindo o waypoint if (distanciaPlayer < distanciaMinPlayer) { if (distanciaPlayer > 1.3) { //Seta o destino para o player meuAgente.SetDestination(Player.transform.position); } else { meuAgente.SetDestination(transform.position); estadoTorso = EstadosPersonagem.Ataque; } //Desenha a linha vermelha Debug.DrawLine(transform.position, Player.transform.position, Color.red); } else { //Seta o destino para o waypoint meuAgente.SetDestination(Waypoints[waypointAtual].position); //Desenha a linha ciana Debug.DrawLine(transform.position, Player.transform.position, Color.cyan); } }