3
respostas

Rotação do Chefe

Estou com um problema com a rotação, estou com os mesmos codigos e a movimentação continua travada. As vezes o jogador da a volta nas costas do Chefe e ele fica batendo de costas pro jogador, como se demorasse muito para rotacionar, porem não entendo a diferença do apresentado em aula

3 respostas

Oi, Matheus, pode colar seu script aqui?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;

public class ControlaChefe : MonoBehaviour, IMatavel
{
    private Transform Jogador;
    private NavMeshAgent agente;
    private Status statusChefe;
    private AnimacaoPersonagem animacaoChefe;
    private MovimentoPersonagem movimentoChefe;
    public GameObject KitMedico;
    public Slider sliderVidaChefe;
    public Image ImagemSlider;
    public Color CorDaVidaMaxima, CorDaVidaMinima;
    public GameObject ParticulaSangue;

    private void Start()
    {
        Jogador = GameObject.FindWithTag("Jogador").transform;
        statusChefe = GetComponent<Status>();
        animacaoChefe = GetComponent<AnimacaoPersonagem>();
        agente = GetComponent<NavMeshAgent>();
        movimentoChefe = GetComponent<MovimentoPersonagem>();
        agente.speed = statusChefe.Velocidade;
        sliderVidaChefe.maxValue = statusChefe.VidaInicial;
        AtualizarSliderChefe();
    }

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

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

            if (pertoDoJogador == true)
            {
                animacaoChefe.Atacar(true);
                Vector3 direcao = Jogador.position - transform.position;
                movimentoChefe.Rotacao(direcao);
            }
            else
            {
                animacaoChefe.Atacar(false);
            }
        }
    }

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

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

    public void ParticulaSangueZumbi(Vector3 posicao, Quaternion rotacao)
    {
        Instantiate(ParticulaSangue, posicao, rotacao);
    }

    public void Morrer()
    {
        animacaoChefe.Morrer();
        movimentoChefe.Morrer();
        this.enabled = false;
        Instantiate(KitMedico, transform.position, Quaternion.identity);
        agente.enabled = false;
        Destroy(gameObject, 2);
    }

    void AtualizarSliderChefe()
    {
        sliderVidaChefe.value = statusChefe.Vida;
        float porcetagemDeVida = (float)statusChefe.Vida / statusChefe.VidaInicial;
        Color corDaVida = Color.Lerp(CorDaVidaMinima, CorDaVidaMaxima, porcetagemDeVida);
        ImagemSlider.color = corDaVida;
    }
}

Se você tentar aumentar um pouco a stoppingDistance do navmesh agent o problema continua?