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

[Bug] Zumbi não aparece(spawna)

Ola, boa noite professor. Ocorreu um bug no meu programa, em que o zumbi não aparece. Desconfio que seja o "GeradorZumbi". Já tentei resolver de diversas formas, mas não consegui... Aqui está o meu script:

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

public class GeradorZumbi : MonoBehaviour
{
    //Modificação no código...
    //public GameObject Zumbi;
    private ControlarZumbi zumbiControl;
    float contadorTempo = 0;
    public float TempoGerarZumbi = 1;
    public LayerMask LayerZumbi;

    void Start()
    {
        //Tentativa de concerto
        zumbiControl = GetComponent<ControlarZumbi>();
    }
     //Update is called once per frame
    void Update()
    {
        contadorTempo += + Time.deltaTime;

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

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

         if(colisores.Length > 0 ) 
         {
             posicaoDeCriacao = AleatorizarPosiao();
             colisores = Physics.OverlapSphere
             (posicaoDeCriacao, 1, LayerZumbi);
         }
         //O "Zumbi" foi trocado por "zumbiControl" na tentativa de                          //funcionar
        Instantiate(zumbiControl, AleatorizarPosiao(), transform.rotation);
    }

    Vector3 AleatorizarPosiao()
    {
        Vector3 posicao = Random.insideUnitSphere * 3;
        posicao += transform.position;
        posicao.y = 0;
        return posicao;
    }
}
2 respostas
solução!

Ola

Analisando seu código, aqui estão algumas observações e sugestões para corrigir o problema:

  1. Referência ao Zumbi: No script, você está tentando instanciar zumbiControl, que parece ser uma instância de ControlarZumbi. Certifique-se de que zumbiControl está configurado corretamente no Unity e que ele é uma instância de um objeto de zumbi que você deseja criar.

  2. Contador de Tempo: O contador de tempo está sendo usado para controlar quando um novo zumbi deve ser gerado. No entanto, o código atual apenas reseta o contador quando ele atinge TempoGerarZumbi, mas não gera um novo zumbi. Você deve chamar a função GerarNovoZumbi() quando o contador atingir o intervalo desejado.

    void Update()
    {
        contadorTempo += Time.deltaTime;
    
        if (contadorTempo >= TempoGerarZumbi)
        {
            contadorTempo = 0;
            GerarNovoZumbi();  // Chama a função para gerar um novo zumbi
        }
    }
    
  3. AleatorizarPosicao(): A função AleatorizarPosicao() gera uma posição aleatória dentro de uma esfera de raio 3. Certifique-se de que a posição gerada seja válida dentro do seu cenário, considerando as colisões e a geometria do seu jogo.

  4. Colisões: A função GerarNovoZumbi() verifica se a posição gerada está colidindo com algum objeto da camada LayerZumbi. Se houver colisões, ela gera uma nova posição e verifica novamente. Certifique-se de que a camada LayerZumbi esteja configurada corretamente nos objetos do zumbi e que não esteja colidindo com objetos indesejados.

  5. Instanciação de Zumbis: A instanciação de zumbis ocorre no final da função GerarNovoZumbi(). Certifique-se de que zumbiControl seja uma instância válida e que seu prefab esteja configurado corretamente no Unity.

Vê se todas as variáveis e referências estão corretas, e que o objeto ControlarZumbi está configurado de forma apropriada. E VÊ se a camada LayerZumbi está configurada corretamente e se não há obstáculos que impeçam a criação dos zumbis.

Muito obrigado, consegui resolver meu problema com sua explicação.