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

Ataca estando longe

Parece que o evento ataque é acionado sem o zumbi realmente estar perto do jogador(sem ate mesmo o jogador nem ter passado perto).

Outro probleminha :meus zumbis estão mais rápido do que deveriam (cheguei a colocar a velocidade no um, mas n deu muita diferença). Procurei, procurei e n consigo achar o erro(dei uma prosseguida nas aulas por isso o código está incrementado ) Help!

public class ControlaInimigo : MonoBehaviour {

    //para que o inimigo saiba que tem que seguir o Jogador que é atribuido no Inspetor do Unity
    public GameObject Jogador;

    public float Velocidade = 5;
    private Rigidbody rigiboryInimigo;
    private Animator animatorJogador;


    // Use this for initialization
    void Start () {

        rigiboryInimigo = GetComponent<Rigidbody> ();
        animatorJogador = GetComponent<Animator> ();


                  //achar GameObject com a tag ("nome exatamente igual ao da tag")
        Jogador = GameObject.FindWithTag ("Jogador");

        //variavel int não abrange números decimais.
        int geraTipoZumbi = Random.Range (1, 28);
        //numeros aleatorios que varia entre(1, 28(e o ultimo numero é descartado então vai ser do 1-27))

        //transform para acessar algo que esta dentro do zumbi
        //GetChild pega filha do objeto (as variáveis que tem dentro) e entre (o nº da lista-qual dos filhos)
        transform.GetChild (geraTipoZumbi).gameObject.SetActive (true);
    }

    // Update is called once per frame
    void Update () {

    }

    void FixedUpdate()
    {
        //para que o zumbi va realmente em direção ao jogador 
        Vector3 direcao = Jogador.transform.position - transform.position;


        //float para armazenar numeros
        float distancia = Vector3.Distance(Jogador.transform.position, transform.position);

        //variável para calcular rotação
        Quaternion novaRotacao = Quaternion.LookRotation (direcao);

        //aplicação da rotação no zumbi
        rigiboryInimigo .MoveRotation (novaRotacao);

        //fora do If para rotacionar em qualquer condicao.


        if (distancia > 2.5) {

            //posiçao que estou + a direção que quero estar (perseguir o jogador)
            rigiboryInimigo .MovePosition
            (rigiboryInimigo .position +
                (direcao * Velocidade * Time.deltaTime));

            animatorJogador.SetBool ("Atacando", false);
        } else {

            animatorJogador.SetBool ("Atacando", true);
        }

    }


//é ativado automaticamente quando ocorre a animação marcada pela cena.
    void AtacaJogador ()
    {

        //velocidade do jogo
        Time.timeScale = 0;//pausa

        //as variaveis publicas funcionam até em outros scrips
        Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);
        //tbm é pública e mostra que o personagem está morto
        Jogador.GetComponent<ControlaJogador> ().Vivo = false;
    }
}

Não sei se o script Gerador de Zumbi está interferindo em algo.

public GameObject Zumbi;
//tipo float guarda numeros e vai ser nosso relogio  
private float contadorTempo = 0;
public float TempoGerarZumbi = 1;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

    //Time.deltaTime ----> transforma frame em seg.
    //cada segundo que passa é somado ao contadoTempo
    contadorTempo += Time.deltaTime;//forma simplificada
    //contadorTempo = contadorTempo + Time.deltaTime


    //sem isso iria gerar zumbi a cada frame
    if (contadorTempo >= TempoGerarZumbi) {

        //que nem nas balas para gerar varios zumbis(clones)
        Instantiate (Zumbi, transform.position, transform.rotation);
        contadorTempo = 0;
    }


}

}

6 respostas

Oi, Gabriela, tudo bem?

Você pode fazer um zip do seu projeto e colocar num Google Drive, Dropbox, ou algum lugar que permita enviar arquivos e colar o link aqui?

Assim podemos ver com mais detalhes a cena e ver se pode ter algo influenciando.

Oi, Gabriela, tudo bem?

Acho que o zip veio errado tem somente o arquivo final do Unity, você precisa zipar a pasta toda.

solução!

Oi, Gabriela, tudo bem?

Eu reduzi a velocidade do prefab para 1 e parece ter dado resultado sobre a velocidade.

Mas o seu caso o que estava dando erro é que a transição da animação Andar -> Atacar no Animator está sem Condição. Então o zumbi estava entrando em Ataque sozinho e iniciando a chamada de função de dano.

Consegui resolver.

MUITO OBRIGADA!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software