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

[Dúvida] Como gerar zumbis aleatórios específicos?

Por exemplo se eu quero gerar apeanas zumbis que estariam no hotel(como turistas, executivos etc) já que planejo adicionar mais áreas pro jogo e utilizar todos os tipos de zumbis de forma mais espalhada

Outra coisa que eu gostaria que me respondessem é como eu posso definir a chance de que um zumbi específico apareça por exemplo é mais raro encontrar um jogador de basquete no hotel do que simplesmente um turista

E por fim como fazer o gerador parar depois de um certo tempo pra que o jogador possa seguir pra outras áreas do jogo sem o gerador ficar gerando zumbis infinitamente

16 respostas
solução!

Oi, João, tudo bem?

Você poderia no gerador fazer um array de opções com números e assim baseado nas opções do array fazer o random ao invés de 1,25 você poderia ter um array com 1,2,3 então esse gerador só faz os zumbis 1,2,3

Sobre zumbi ser mais raro seria mais ou menos o mesmo processo você poderia criar um array dos zumbis raros e na hora de criar você aleatoriza um numero tipo:

int porcentagem = Random.Range(0, 100);
if(porcentagem >= 90) {
  // zumbi raro 10% de chance de aparecer
}
else {
  // zumbi normal
}

A última nós cobrimos nas outras partes do curso, melhoramos o jogo pra cada gerador cobrir uma área e ter um limite no número de zumbis.

Você pode me explicar como separar quais zumbis são raros e quais são normais e também qual é o código de Random array

Obrigado

Você vai fazer algo assim:

public int[] ZumbisNormais;
public int[] ZumbisRaros;

Depois você vai lá no Editor no Inspector colocar um tamanho no seu array (size) e preencher com os elementos que você, lembre-se de não deixar size sobrando.

Então vamos supor que os normais são 1,4,5,6,7,8,9,10 e os raros 2, 3. Você nem sempre precisa preencher pelo inspector se quiser você pode deixar direto no código tipo int[] zumbisNormais = {1, 4, 6 }.

Depois é só aleatorizar um desses números:

int porcentagem = Random.Range(0, 100);
if(porcentagem >= 90) {
  tipo = ZumbisNormais[Random.Range(0, ZumbisNormais.Length)];
  // aqui vai vir o número do tipo
}
else {
  tipo = ZumbisRaros[Random.Range(0, ZumbisRaros.Length)];
}

Se quiser deixar esse código mais bonitinho você poderia fazer algo assim:

int porcentagem = Random.Range(0, 100);
var tiposParaEscolher = porcentagem >= 90 ? ZumbisNormais : ZumbisRaros;
tipo = tiposParaEscolher[Random.Range(0, tiposParaEscolher.Length)];

A variável tiposParaEscolher vai receber qual das duas listas você vai aleatorizar e você pode mduar esse lógica, e depois pegamos um elemento da lista de 0 (primeiro elemento) até o último que é o tamanho do array.

ps.: na Unity não precisamos fazer tamanho - 1 que seria o último elemento de fato porque o Random.Range de ints excluí o último elemento.

Eu coloquei tudo em código mas não entendi exatamente o que é pra colocar e não parece ter dado certo . Pode me ajudar? https://drive.google.com/file/d/1eXjEuHCV6MvhlhNSsqTOQs8oPqYSKmYW/view?usp=share_link

Oi, João, cola seu código aqui que acho que fica mais fácil de analisar

Valeu!

Oi, João, cola seu código aqui que acho que fica mais fácil de analisar

Valeu!

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

public class GeradorDeZumbis : MonoBehaviour{

public GameObject Zumbi;
float ContadorTempo = 0;
public float TempoGerarZumbi = 1;
public int[] ZumbisNormais;
public int[] ZumbisRaros;
int porcentagem = Random.Range(0, 100);

// Start is called before the first frame update
void Start()
{

}

// Update is called once per frame
void Update()
{
    ContadorTempo += Time.deltaTime;

    if (ContadorTempo >= TempoGerarZumbi)
    {
        Instantiate(Zumbi, transform.position, transform.rotation);
        ContadorTempo = 0;
    }

    if (porcentagem >= 90)
    {
        ZumbisNormais = ZumbisNormais[Random.Range(1, 3)];
        3, 26
    }
    else
    {
        ZumbisRaros = ZumbisRaros[Random.Range(1, 5)];
        4, 10, 11, 21, 25
    }
    int porcentagem = Random.Range(0, 100);
    var tiposParaEscolher = porcentagem >= 90 ? ZumbisNormais : ZumbisRaros;
    tipo = tiposParaEscolher[Random.Range(0, tiposParaEscolher.Length)];
}

}

para gerador de zumbis

Ficaria algo assim:

ContadorTempo += Time.deltaTime;

    if (ContadorTempo >= TempoGerarZumbi)
    {
        int porcentagem = Random.Range(0, 100);
        var tiposParaEscolher = porcentagem >= 90 ? ZumbisNormais : ZumbisRaros;
        tipo = tiposParaEscolher[Random.Range(0, tiposParaEscolher.Length)];
        novoZumbi = Instantiate(Zumbi, transform.position, transform.rotation);
        novoZumbi.transform.GetChild(tipo).gameObject.SetActive(true);

        ContadorTempo = 0;
    }

Você vai preencher a variável ZumbisNormais e ZumbisRaros com os números dos zumbis que quer que cada uma seja e na hora vai instanciar um zumbi e ativar aquele escolhido. Não testei o código nem nada mas acredito que dê pra ter uma ideia.

Bons estudos!

está dizendo que tipo e novozumbi não existem no contexto deveria criar variavéis?

Sim, faltou um var novoZumbi ali.

tipo var também?

var novoZumbi = Instantiate(Zumbi, transform.position, transform.rotation);

só está perguntando o que é 'tipo' agora

pode ser var também, que aí o C# arruma pra você.

Foi difícil mas está funcionando bem continuarei com os estudos agora obrigado pela ajuda