Example #1
0
    private void GerarNovoZumbi()
    {
        Vector3 posicaoGeracao = GerarPosicaoAleatoria();

        if (Vector3.Distance(posicaoGeracao, jogador.transform.position) > 30)
        {
            Collider[] colisores = Physics.OverlapSphere(posicaoGeracao, 1, LayerZumbi);

            bool existeEspaco     = colisores.Length > 0;
            bool quantidadeValida = quantidadeZumbisVivos < quantidadeMaximaZumbis;
            if (quantidadeValida)
            {
                if (existeEspaco)
                {
                    GerarNovoZumbi();
                }
                else
                {
                    quantidadeZumbisVivos++;
                    ControlaZumbi controlaZumbi = Instantiate(modeloZumbi, posicaoGeracao, transform.rotation).GetComponent <ControlaZumbi>();
                    controlaZumbi.gerador = this;
                }
            }
        }
    }
    private IEnumerator GerarZumbi()
    {
        Vector3 posicaoGeracao = AleatorizarPosicao();

        while (Physics.OverlapSphere(posicaoGeracao, 2, layerZumbi).Length > 0)
        {
            posicaoGeracao = AleatorizarPosicao();
            yield return(null);
        }

        ControlaZumbi controlaZumbi =
            Instantiate(zumbi, posicaoGeracao, transform.rotation).GetComponent <ControlaZumbi>();

        controlaZumbi.meuGerador = this;
        quantidadeZumbisVivos++;
    }
Example #3
0
    // retorno especifico do unity para evitar frezzing em um loop
    private IEnumerator gerarZumbi()
    {
        Vector3 posicaoCriacao = this.aleatorizarPosicao();

        Collider[] colisores = Physics.OverlapSphere(posicaoCriacao, 1, layerZumbi);

        while (colisores.Length > 0)
        {
            posicaoCriacao = this.aleatorizarPosicao();
            colisores      = Physics.OverlapSphere(posicaoCriacao, 1, layerZumbi);
            yield return(null);
        }

        ControlaZumbi cZumbi = Instantiate(zumbi, posicaoCriacao, transform.rotation).GetComponent <ControlaZumbi>();

        cZumbi.gerador = this;
        quantidadeZumbisAtual++;
    }
    private void OnTriggerEnter(Collider objetoDeColisao)
    {
        Quaternion rotacaoOpastaBala = Quaternion.LookRotation(-transform.forward);

        switch (objetoDeColisao.tag)
        {
        case Tags.Inimigo:
            ControlaZumbi zumbi = objetoDeColisao.GetComponent <ControlaZumbi>();
            zumbi.TomarDano(danoTiro);
            zumbi.ParticulaSangue(transform.position, rotacaoOpastaBala);
            break;

        case Tags.Chefe:
            ControlaChefe chefe = objetoDeColisao.GetComponent <ControlaChefe>();
            chefe.TomarDano(danoTiro);
            chefe.ParticulaSangue(transform.position, rotacaoOpastaBala);
            break;
        }
        Destroy(gameObject);
    }
Example #5
0
    private void OnTriggerEnter(Collider other)
    {
        Quaternion rotacaoOpostaBala = Quaternion.LookRotation(-transform.forward);

        switch (other.tag)
        {
        case "Inimigo":
            ControlaZumbi inimigo = other.GetComponent <ControlaZumbi>();
            inimigo.dano(1);
            inimigo.particulaSangue(transform.position, rotacaoOpostaBala);
            break;

        case "Chefe":
            ControlaChefe chefe = other.GetComponent <ControlaChefe>();
            chefe.dano(1);
            chefe.particulaSangue(transform.position, rotacaoOpostaBala);
            break;
        }

        Destroy(gameObject);
    }