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

os zumbis continuam aparecendo do lado do personagem

já verifiquei o código varias vezes e já comparei com os códigos do instrutor, baixando o projeto pronto no final da aula 4, quando dou o play o gerador de zumbis que fica ao lado do jogador começa a gerar zumbis.

o código GeradorZumbis:

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 void Start()
    {
        jogador = GameObject.FindWithTag("Jogador");
    }

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

        if(Vector3.Distance(transform.position, 
            jogador.transform.position) > 
            DistanciaDoJogadorParaGeracao )
        {
            contadorTempo += Time.deltaTime;

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

    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;
        }

        Instantiate(Zumbi, posicaoDeCriacao, transform.rotation);
    }

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

        return posicao;
    }
}
4 respostas

Oi, Victor, tudo bem?

Isso acontece sempre? Pode enviar o projeto num .zip pelo Google Drive, Dropbox, pra darmos uma olhada? Só colar o link aqui.

Mas o que pode estar acontecendo é que a Corrotina foi ativada e ela está procurando uma localização quando ele encontra o jogador já esta próximo da região mas mesmo assim o zumbi é criado então você pode verificar novamente a distância e parar a Corrotina se quiser.

ok

https://drive.google.com/open?id=1ua-3Yb8CBXMljVlAAQbt10vh54A765KZ

também queria saber como resolver um outro problema, os prefabs não abrem direto na aba no inspetor, tenho sempre que clicar em open prefab

será por causa da atualização?

solução!

Oi, Victor,

Esse é o novo Prefab Workflow da Unity ele veio na 2018.3 mas logo eles devem refiná-lo um pouco pra não ter que abrir a janela toda vez. Você pode ler mais aqui:

https://blogs.unity3d.com/2018/06/20/introducing-new-prefab-workflows/

Quanto ao seu código, no código que você colocou não tinha mas no código do projeto que você mandou notei que o erro era causado por um ; a mais no if do Update.

if(Vector3.Distance(transform.position,
            jogador.transform.position) > 
            distanciaDoJogadorParaGeracao);

Então esse if acabava só com a condição então o código dentro dele executa sempre, fazendo os zumbis serem criados o tempo todo.