3
respostas

Meu Chefe não ataca o jogador

Meu chefe se aproxima de mim mas n me ataca.

meu script: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI;

public class ControlaChefe : MonoBehaviour, IMatavel { private Transform jogador; private NavMeshAgent agente; private Status statusChefe; private AnimacaoPersonagem animacaoChefe; private MovimentaPersonagem movimentoChefe;

private void Start()
{
    jogador = GameObject.FindWithTag("Player").transform;
    agente = GetComponent<NavMeshAgent>();
    statusChefe = GetComponent<Status>();
    agente.speed = statusChefe.Velocidade;
    animacaoChefe = GetComponent<AnimacaoPersonagem>();
    movimentoChefe = GetComponent<MovimentaPersonagem>();
}

private void Update()
{
    agente.SetDestination(jogador.position);
    animacaoChefe.Movimentar(agente.velocity.magnitude);

    if (agente.hasPath == true)
    {
        bool estouPertoDoJogador = agente.remainingDistance <= agente.stoppingDistance;

        if (estouPertoDoJogador)
        {
            animacaoChefe.Atacar(true);
            Vector3 direcao = jogador.position - transform.position;
            movimentoChefe.Rotacionar(direcao);
        }
        else
        {
            animacaoChefe.Atacar(false);
        }
    }
}

void AtacaJogador()
{
    int dano = Random.Range(30, 40);
    jogador.GetComponent<ControladorJogador>().TomarDano(dano);
}

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

public void Morrer()
{
    animacaoChefe.Morrer();
    movimentoChefe.Morrer();
    this.enabled = false;
    agente.enabled = false;
    Destroy(gameObject, 2);
}

}

3 respostas

Olá, tudo bem?

Coloca antes do if um Debug.Log pra você poder olhar como está o valor das variáveis

Você pode fazer algo como Debug.Log(estouPertoDoJogador); depois da variável para ver no console se ela está ficando true ou não, pode ser que os valores da distancias (stoppingDistance) esteja muito curto no NavMeshAgent.

Fiz isso, o valor do Stopping Distance é sempre zero. Por isso ele nunca atacava. Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Isso aí, na aula acho que eu coloquei 5 mas depois refinei o valor.