Como Limitar Spawn de Hordas
3 participantes
Página 1 de 1
Como Limitar Spawn de Hordas
Olá pessoal preciso de ajuda com meu código. Meu jogo é do gênero space shooter e resolvi criar hordas de inimigos. Não entendo praticamente nada de programação e o meu código foi retirado passo-a-passo de um
tutorial de plataforma em inglês. O código faz o seguinte, eu defino quantas hordas vou ter, e em cada delas a quantidade de inimigos e o tempo de cada um aparecer. Assim que todos os inimigos daquela horda são destruídos, a próxima horda vem. Há um tempo
de spawn entre cada horda, definido que quando uma horda terminar, a outra vai vir em 5 segundos. O código tá rodando belezinha, mas o problema é que ele fica rodando infinitamente e eu não quero isso, quero que ele pare de rodar assim
que todas as hordas forem completadas. Por exemplo, se eu coloquei 3 hordas, assim que o jogador passar pelas 3 hordas o código vai parar de rodar e o jogo termina. Então preciso de uma explicação sobre o que eu tenho que fazer. Abaixo segue o código completo.
tutorial de plataforma em inglês. O código faz o seguinte, eu defino quantas hordas vou ter, e em cada delas a quantidade de inimigos e o tempo de cada um aparecer. Assim que todos os inimigos daquela horda são destruídos, a próxima horda vem. Há um tempo
de spawn entre cada horda, definido que quando uma horda terminar, a outra vai vir em 5 segundos. O código tá rodando belezinha, mas o problema é que ele fica rodando infinitamente e eu não quero isso, quero que ele pare de rodar assim
que todas as hordas forem completadas. Por exemplo, se eu coloquei 3 hordas, assim que o jogador passar pelas 3 hordas o código vai parar de rodar e o jogo termina. Então preciso de uma explicação sobre o que eu tenho que fazer. Abaixo segue o código completo.
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnDeHordas : MonoBehaviour {
private int valorHorda;
public NHorda adicionaHorda;
public enum SpawnState {SPAWNING, ESPERANDO, CONTANDO};
[System.Serializable]
public class Horda
{
public string nomeDaHorda;
public Transform inimigo;
public int contador;
public float rate;
}
public Horda[] hordas;
private int proximaHorda = 0;
public float tempoEntreHordas = 5f;
public float contadorDeHorda;
private float procurarContador = 1f;
private SpawnState state = SpawnState.CONTANDO;
void Start()
{
contadorDeHorda = tempoEntreHordas;
adicionaHorda = FindObjectOfType<NHorda>();
}
void Update()
{
if(state == SpawnState.ESPERANDO)
{
if (!InimigoEstaVivo ())
{
HordaCompleta ();
}
else
{
return;
}
}
if (contadorDeHorda <= 0) {
if (state != SpawnState.SPAWNING)
{
StartCoroutine (SpawnHorda(hordas[proximaHorda]));
}
} else
{
contadorDeHorda -= Time.deltaTime;
}
}
void HordaCompleta()
{
Debug.Log ("Horda Completa");
state = SpawnState.CONTANDO;
contadorDeHorda = tempoEntreHordas;
if (proximaHorda + 1 > hordas.Length - 1) {
proximaHorda = 0;
Debug.Log ("Todas as Hordas foram completadas!");
// adiciono aqui o que acontece quando o jogador termina as hordas. Fim de jogo vai aqui
}
else
{
proximaHorda++;
adicionaHorda.numHorda+=valorHorda=1;
}
}
bool InimigoEstaVivo()
{
procurarContador -= Time.deltaTime;
if(procurarContador<=0f)
{
procurarContador = 1f;
if (GameObject.FindGameObjectWithTag ("InimigoNave") == null)
{
return false;
}
}
return true;
}
IEnumerator SpawnHorda(Horda _horda)
{
state = SpawnState.SPAWNING;
for (int i = 0; i < _horda.contador; i++)
{
SpawnInimigo (_horda.inimigo);
yield return new WaitForSeconds (1f/_horda.rate);
}
state = SpawnState.ESPERANDO;
yield break;
}
void SpawnInimigo(Transform _inimigo)
{
Debug.Log ("Spawing Inimigo: " + _inimigo.name);
Instantiate (_inimigo, transform.position, transform.rotation);
}
}
RobinF- Iniciante
- PONTOS : 2647
REPUTAÇÃO : 0
Respeito as regras :
Re: Como Limitar Spawn de Hordas
Pelo que eu Notei o Contador de Hordas é esse :
contadorDeHorda
Crie um Limitador por Exemplo:
public int MaxHordas = 3;
tem Varios Jeitos de Fazer mas assim vc Limita tudo que o Update esta Chamando pra Chamar só se o ContadordeHordas estiver Abaixo ou Igual ao MaxHordas que vc Limitou!
Espero que tenha Entendido!
contadorDeHorda
Crie um Limitador por Exemplo:
public int MaxHordas = 3;
- Código:
public int MaxHordas = 3;
void Update(){
if(contadorDeHorda <= MaxHordas){
if(state == SpawnState.ESPERANDO)
{
if (!InimigoEstaVivo ())
{
HordaCompleta ();
}
else
{
return;
}
}
if (contadorDeHorda <= 0) {
if (state != SpawnState.SPAWNING)
{
StartCoroutine (SpawnHorda(hordas[proximaHorda]));
}
} else
{
contadorDeHorda -= Time.deltaTime;
}
}
}
tem Varios Jeitos de Fazer mas assim vc Limita tudo que o Update esta Chamando pra Chamar só se o ContadordeHordas estiver Abaixo ou Igual ao MaxHordas que vc Limitou!
Espero que tenha Entendido!
Re: Como Limitar Spawn de Hordas
AndyShow escreveu:Pelo que eu Notei o Contador de Hordas é esse :
contadorDeHorda
Crie um Limitador por Exemplo:
public int MaxHordas = 3;
- Código:
public int MaxHordas = 3;
void Update(){
if(contadorDeHorda <= MaxHordas){
if(state == SpawnState.ESPERANDO)
{
if (!InimigoEstaVivo ())
{
HordaCompleta ();
}
else
{
return;
}
}
if (contadorDeHorda <= 0) {
if (state != SpawnState.SPAWNING)
{
StartCoroutine (SpawnHorda(hordas[proximaHorda]));
}
} else
{
contadorDeHorda -= Time.deltaTime;
}
}
}
tem Varios Jeitos de Fazer mas assim vc Limita tudo que o Update esta Chamando pra Chamar só se o ContadordeHordas estiver Abaixo ou Igual ao MaxHordas que vc Limitou!
Espero que tenha Entendido!
Olá Andy, vlw pela ajuda. Não sei se estou certo mas acho que o contadorDeHorda faz uma contagem regressiva para a próxima horda chegar. O que define quantas hordas vou ter é o size que ele pede no Inspector. Se eu colocar 3 ele vai criar 3 campos para que eu possa preencher com o prefab do inimigo, a qnt de inimigos a serem spawnados e o tempo entre cada spawn.
Minha classe Horda é uma string, então acho que a quantidade que eu marco se liga com a quantidade de hordas que eu vou ter, e ai depois que ele passa por todas elas ele fica fazendo um looping de todas elas em sequencia novamente
- Código:
public class Horda
{
public string nomeDaHorda;
public Transform inimigo;
public int contador;
public float rate;
}
public Horda[] hordas;
O que me intriga é que eu não estou conseguindo identificar no código a parte que se relaciona com o "size" da minha string Horda. Porque se eu achar eu posso aplicar sua lógica, certo? Eu posso colocar que assim que ultrapassar o valor do size ele para o looping.
RobinF- Iniciante
- PONTOS : 2647
REPUTAÇÃO : 0
Respeito as regras :
Re: Como Limitar Spawn de Hordas
Consegui fazer um jeito de acabar com o spawn.
Criei uma nova variável
No método HordaCompleta() mandei ele destruir o meu Game Object Hordas e ficou assim entao:
No Inspector eu coloquei que minha hordaObjetct é o meu instanciador Hordas então assim que todas as hordas forem completadas ele vai destruir meu instanciador.
E desse jeito o looping de spawn acaba.
Foi mais simples do que eu imaginava, pena que ninguém soube responder mas fica a dica para quem tiver a mesma dúvida.
Criei uma nova variável
- Código:
public GameObject hordaObject;
No método HordaCompleta() mandei ele destruir o meu Game Object Hordas e ficou assim entao:
- Código:
if (proximaHorda + 1 > hordas.Length - 1) {
proximaHorda = 0;
Destroy (hordaObject);
Debug.Log ("Todas as Hordas foram completadas!");
No Inspector eu coloquei que minha hordaObjetct é o meu instanciador Hordas então assim que todas as hordas forem completadas ele vai destruir meu instanciador.
E desse jeito o looping de spawn acaba.
Foi mais simples do que eu imaginava, pena que ninguém soube responder mas fica a dica para quem tiver a mesma dúvida.
RobinF- Iniciante
- PONTOS : 2647
REPUTAÇÃO : 0
Respeito as regras :
Re: Como Limitar Spawn de Hordas
uma simples variável do tipo bool resolvia ;-;
Weslley- Moderador
- PONTOS : 5726
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» Como fazer um sistema de Spawn aleatório?
» Como limitar o angulo de rotação de um objeto?
» Como limitar ate onde a câmera do unity2D pode ir?
» Como parar o spawn aleatório?
» como limitar o zoom mínimo e máximo no lean touch
» Como limitar o angulo de rotação de um objeto?
» Como limitar ate onde a câmera do unity2D pode ir?
» Como parar o spawn aleatório?
» como limitar o zoom mínimo e máximo no lean touch
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos