Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Meus zumbis estão com um bug diferente (ataque duplo ou triplo que não causa dano)

Não sei bem como descrever, mas meus zumbis asgumas vezes começam a me atacar e ao invés de causarem dano, eles apenas atacam mais rápido (fazem a animação de atacar) mais rápido e sem causar dano. Isso começou quando mexemos na parte de ataque da última vez, mas como vi que nesse exercício falaríamos sobre bug do zumbi, achei que se tratasse desse.

O código está assim:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ControladorZumbi : MonoBehaviour, IMatavel

{

    public GameObject jogador;
    private MovimentacaoPersonagem movimentoZumbi;
    private AnimacaoPersonagem animacaoZumbi;
    private Status statusZumbi;
    public AudioClip somMorteZumbi;
    private Vector3 posicaoAleatoria;
    private Vector3 direcao;
    private float contadorRoaming;
    private float tempoEntrePosicoesAleatorias = 4;

    // Start is called before the first frame update
    void Start()
    {
        jogador = GameObject.FindWithTag("Player");
        animacaoZumbi = GetComponent<AnimacaoPersonagem>();
        movimentoZumbi = GetComponent<MovimentacaoPersonagem>();
        AleatorizarZumbi();
        statusZumbi = GetComponent<Status>();
    }

    void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, jogador.transform.position);
        movimentoZumbi.Rotacionar(direcao);
        animacaoZumbi.Movimentar(direcao.magnitude);

    if (distancia > 15)
    {
        Roaming();
    }
    else if (distancia > 2.5)
    {
        direcao = jogador.transform.position - transform.position;
        movimentoZumbi.Movimentar(direcao, statusZumbi.velocidade);
        animacaoZumbi.Atacar(false);
    }

     else
    {
        direcao = jogador.transform.position - transform.position;
        animacaoZumbi.Atacar(true);
    }
    }

    void Roaming()
    {
        contadorRoaming -= Time.deltaTime;

        if(contadorRoaming <=0)
        {
            posicaoAleatoria = aleatorizarPosicao();
            contadorRoaming += tempoEntrePosicoesAleatorias;
        }

        bool pertoSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;

        if(pertoSuficiente == false)
        {
            direcao = posicaoAleatoria - transform.position;
            movimentoZumbi.Movimentar(direcao, statusZumbi.velocidade);
        }

    }

    Vector3 aleatorizarPosicao()
    {
        Vector3 posicao = Random.insideUnitSphere * 10;
        posicao += transform.position;
        posicao.y = transform.position.y;

        return posicao;
    }

    void atacaJogador()
    {
        int danoZumbi = Random.Range(20, 30);
        jogador.GetComponent<ControladorJogador>().TomarDano(danoZumbi); 

    }

    void AleatorizarZumbi ()
    {
        int geradorTiposZumbi = Random.Range(1,28);
        transform.GetChild(geradorTiposZumbi).gameObject.SetActive(true);
    }

    public void TomarDano(int dano)
    {
        statusZumbi.Vida -= dano;
        if(statusZumbi.Vida <= 0)
        {
            Morrer();
        }
    }

    public void Morrer()
    {
        Destroy(gameObject);
        ControlaAudio.instancia.PlayOneShot(somMorteZumbi);
    }
}

E um link para download do projeto caso precisem abrir o projeto para conseguir simular o erro é esse daqui: https://drive.google.com/file/d/1_-vmGCi4r6RRUubxM7h-K_v-2cugIxea/view?usp=share_link

Obrigada!!!

2 respostas
solução!

Oi, Giovanna, isso é porque a distância do zumbi do pertoSuficiente tá um número muito exato o que faz com que ele não consiga terminar a animação a tempo mas o Evento é ativado! Tem dois jeitos de resolver, você pode aumentar um pouco o número ou arrastar o Evento da animação um pouco mais pro final, assim mesmo que ele não consiga atacar não vai dar dano.

Bons estudos!

Ah, faz sentido! Mudei para 0.1 e funcionou! Muito obrigada!!!