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++; }
// 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); }
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); }