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

Zumbis não ataca e não é apresentado nem um erro na unity

segue link para o jogo: https://drive.google.com/file/d/1uYuETtuUyPQMpXkoHerFou-TiEq6zr_3/view?usp=sharing

Eu fiz a aula de reformulação / simplificação do codigo e os zumbis pararam de atacar o jogador e não é apresentado nem um erro na unity passei bastante tempo procurando e não encontrei nada de errado

6 respostas

Oi, Natelson, tudo bem?

Pode colocar seu código do AnimacaoPersonagem por aqui pra gente dar uma olhada?

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

public class AnimacaoPersonagem : MonoBehaviour
{
    private Animator meuAnimator;

    void Awake()
    {
        meuAnimator = GetComponent<Animator>();
    }

    public void Atacar(bool estado)
    {
        meuAnimator.SetBool("Atacando", false);
    }
}

Oi, Natelson, tudo bem?

Acho que por causa dessas linha aqui os zumbis não estão atacando:

meuAnimator.SetBool("Atacando", false);

Dessa forma nunca trocaria o valor de atacando para true, você precisa substituir o false para usar o argumento estado.

Agora eu troquei o false para true e agora eles me atacam de muito longe esse é o codigo do Controla Inimigo;

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

public class ControlaInimigo : MonoBehaviour
{

    public GameObject Jogador;
    public float Velocidade = 5;
    private MovimentoPersonagem movimentaInimigo;
    private AnimacaoPersonagem animacaoInimigo;

    // Use this for inicialization
    void Start()
    {
        Jogador = GameObject.FindWithTag("Jogador");
        int geraTipoZumbi = Random.Range(1, 28);
        transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
        animacaoInimigo = GetComponent<AnimacaoPersonagem>();
        movimentaInimigo = GetComponent<MovimentoPersonagem>();
    }

    //Update is called once per frame

    void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
        Vector3 direcao = Jogador.transform.position - transform.position;

        movimentaInimigo.Rotacionar(direcao);


        if (distancia > 2.5)
        {

            movimentaInimigo.Movimentar(direcao, Velocidade);

            animacaoInimigo.Atacar(false);
        }
        else
        {
            animacaoInimigo.Atacar(true);
        }
    }

    void AtacaJogador()
    {
        int dano = Random.Range(20, 30);
        Jogador.GetComponent<ControlaJogador>().TomarDano(dano);
    }
}
solução!

Você precisa mudar para usar o argumento estado

meuAnimator.SetBool("Atacando", estado);

muito obrigado pela ajuda deu certo aqui