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

[Bug] Meus zumbis param de nascer depois de um tempo

Meus zumbis param de nascer depois de um tempo. Eu realmente não sei o que pode estar errado no código ou em meu projeto. Eu baixei o código do final da aula 03, joguei no Chat GPT para comparar com o meu e não apareceu nenhuma diferença. Vou colocar meu projeto em anexo também, para terem acesso aos demais scripts e posicionamentos no level, pois realmente não tenho a menor ideia do o que pode ser, visto que o código está idêntico ao da aula e os zumbis nascem no começo normalmente e param de nascer depois de certo tempo. No print que eu coloquei abaixo, pode ver no Inspector que a quantidade máxima de zumbis está em 2 (não aumentou) e a quantidade de zumbis vivos em 4, mesmo sem nenhum zumbi vivo. É a única pista que tenho, mas não tenho certeza, principalmente pelo fato do código estar igual ao do professor. No começo da fase funciona, mas depois para. Podem me ajudar?

Meu código do script GeradorZumbi

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

public class GeradorZumbis : MonoBehaviour
{
    public GameObject Zumbi;
    private float contadorTempo = 0;
    public float TempoGerarZumbi = 1;
    public LayerMask LayerZumbi;
    private float distanciaDeGeracao = 3;
    private float DistanciaDoJogadorParaGeracao = 20;
    private GameObject jogador;
    private int quantidadeMaximaDeZumbisVivos = 2;
    private int quantidadeDeZumbisVivos;
    private float tempoProximoAumentoDeDificuldade = 30;
    private float contadorDeAumentarDificuldade;


    private void Start()
    {
        jogador = GameObject.FindWithTag(Tags.Jogador);
        contadorDeAumentarDificuldade = tempoProximoAumentoDeDificuldade;
        for (int i = 0; i < quantidadeMaximaDeZumbisVivos; i++)
        {
            StartCoroutine(GerarNovoZumbi());
        }

    }

    // Update is called once per frame
    void Update()
    {
        bool possoGerarZumbisPelaDistancia = Vector3.Distance(transform.position, jogador.transform.position) > DistanciaDoJogadorParaGeracao;


        if (possoGerarZumbisPelaDistancia == true && quantidadeDeZumbisVivos < quantidadeMaximaDeZumbisVivos)

        {
            contadorTempo += Time.deltaTime;

            if (contadorTempo >= TempoGerarZumbi)
            {
                StartCoroutine(GerarNovoZumbi());
                contadorTempo = 0;
            }
        }

        if (Time.timeSinceLevelLoad > contadorDeAumentarDificuldade)
        {
            quantidadeDeZumbisVivos++;
            contadorDeAumentarDificuldade = Time.timeSinceLevelLoad + tempoProximoAumentoDeDificuldade;
        }
    }

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.yellow;
        Gizmos.DrawWireSphere(transform.position, distanciaDeGeracao);
    }

    IEnumerator GerarNovoZumbi ()
    {
        Vector3 posicaoDeCriacao = AleatorizarPosicao();
        Collider[] colisores = Physics.OverlapSphere(posicaoDeCriacao, 1, LayerZumbi);

        while(colisores.Length > 0)
        {
            posicaoDeCriacao = AleatorizarPosicao();
            colisores = Physics.OverlapSphere(posicaoDeCriacao, 1, LayerZumbi);
            yield return null;
        }
        ControlaInimigo zumbi =  Instantiate(Zumbi, posicaoDeCriacao, transform.rotation).GetComponent<ControlaInimigo>();
        zumbi.meuGerador = this;
        quantidadeDeZumbisVivos++;
    }

    Vector3 AleatorizarPosicao()
    {
        Vector3 posicao = Random.insideUnitSphere * distanciaDeGeracao;
        posicao += transform.position;
        posicao.y = 0;

        return posicao;
    }

    public void DiminuirQuantidadeDeZumbisVivos()
    {
        quantidadeDeZumbisVivos--;
    }
}

Print do Jogo rodando com Inspector aberto em um dos Geradores de Zumbi:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

Consegui achar o erro depois de muito tempo kkkkk eu tinha colocado

if (Time.timeSinceLevelLoad > contadorDeAumentarDificuldade) { quantidadeDeZumbisVivos++; contadorDeAumentarDificuldade = Time.timeSinceLevelLoad + tempoProximoAumentoDeDificuldade; }

sendo que deveria ser

quantidadeMaximaDeZumbisVivos++;

pelo nome ser muito parecido, deixei passar e nem percebi

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