Não repetir objeto no Spawn
3 participantes
Página 1 de 1
Não repetir objeto no Spawn
Dae galera,
Estou com esse script de spanw aleatório e tal, onde vc coloca os locais onde vão ser criados, o numero de inimigos/obstaculos e o tempo aleatório tbm.
Minha duvida é, como fazer para não repetir os objetos, pois as vezes ele fica repetindo e eu não quero isso. Como fazer spawnar sempre objetos diferentes?
Obrigado!!
Estou com esse script de spanw aleatório e tal, onde vc coloca os locais onde vão ser criados, o numero de inimigos/obstaculos e o tempo aleatório tbm.
Minha duvida é, como fazer para não repetir os objetos, pois as vezes ele fica repetindo e eu não quero isso. Como fazer spawnar sempre objetos diferentes?
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Spawn : MonoBehaviour {
public GameObject[] locais;
public GameObject[] enemy;
private float cronometro;
public float tempo;
void Update () {
cronometro += Time.deltaTime;
if (cronometro >= Random.Range(tempo, 8f)){
cronometro = 0;
Instantiate (enemy[Random.Range (0,enemy.Length)],locais[Random.Range(0, locais.Length)].transform.position, locais[Random.Range(0, locais.Length)].transform.rotation);
}
}
}
Obrigado!!
Hardencio- Avançado
- PONTOS : 3720
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Não repetir objeto no Spawn
Talves te ajude esse tuto.
Última edição por Zecandy em Sáb Jan 06, 2018 12:37 am, editado 1 vez(es)
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Não repetir objeto no Spawn
Eu lhe indico um sistema básico. Cacheie os Ranges e vá removendo depois de completar a função, conforme for spawnando.
Re: Não repetir objeto no Spawn
Que tuto? Não tem nada aqui :/Zecandy escreveu:Talves te ajude esse tuto.
Hardencio- Avançado
- PONTOS : 3720
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Não repetir objeto no Spawn
recagonlei escreveu:Eu lhe indico um sistema básico. Cacheie os Ranges e vá removendo depois de completar a função, conforme for spawnando.
Oq é "Cacheie os ranges"? Você tem algum exemplo?
Hardencio- Avançado
- PONTOS : 3720
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Não repetir objeto no Spawn
Não tinha saido o link acima esta o video.
Zecandy- Mestre
- PONTOS : 3506
REPUTAÇÃO : 155
Idade : 42
Respeito as regras :
Re: Não repetir objeto no Spawn
Hardencio escreveu:recagonlei escreveu:Eu lhe indico um sistema básico. Cacheie os Ranges e vá removendo depois de completar a função, conforme for spawnando.
Oq é "Cacheie os ranges"? Você tem algum exemplo?
Os Random.Range que tu faz, crie um inteiro para cada um, depois que você fizer a lógica, remova no index, que depois não irá retornar essa valor... Tu pode criar uma segunda lista, para que não afete a primeira e toda vez que terminar a lista, tu começa novamente... Um pequeno ex, que pode te dar um start:
- Código:
public List<GameObject> locais;
public List<GameObject> enemy;
private float cronometro;
public float tempo;
void Update () {
cronometro += Time.deltaTime;
if (cronometro >= Random.Range(tempo, 8f)){
cronometro = 0;
int tempEnemyRange = Random.Range (0,enemy.Length);
int tempLocalsRange = Random.Range(0, locais.Length);
Instantiate (enemy[tempEnemyRange], locais[tempLocalRange].transform.position, locais[tempLocalsRange].transform.rotation);
enemy.RemoveAt(tempEnemyRange);
locais.RemoveAt(tempLocalRange);
}
}
Eu vi também, que usa dois Random.Range um para position e outro para rotation, no caso não sei se era isso o desejado, mas coloquei o range cacheado para a posição e rotação iguais, caso queira diferente só criar outro inteiro e cachear outro range.
Obs: eu troquei de Array, para Lists, pois elas que contém a função RemoveAt.
Re: Não repetir objeto no Spawn
recagonlei escreveu:Hardencio escreveu:recagonlei escreveu:Eu lhe indico um sistema básico. Cacheie os Ranges e vá removendo depois de completar a função, conforme for spawnando.
Oq é "Cacheie os ranges"? Você tem algum exemplo?
Os Random.Range que tu faz, crie um inteiro para cada um, depois que você fizer a lógica, remova no index, que depois não irá retornar essa valor... Tu pode criar uma segunda lista, para que não afete a primeira e toda vez que terminar a lista, tu começa novamente... Um pequeno ex, que pode te dar um start:
- Código:
public List<GameObject> locais;
public List<GameObject> enemy;
private float cronometro;
public float tempo;
void Update () {
cronometro += Time.deltaTime;
if (cronometro >= Random.Range(tempo, 8f)){
cronometro = 0;
int tempEnemyRange = Random.Range (0,enemy.Length);
int tempLocalsRange = Random.Range(0, locais.Length);
Instantiate (enemy[tempEnemyRange], locais[tempLocalRange].transform.position, locais[tempLocalsRange].transform.rotation);
enemy.RemoveAt(tempEnemyRange);
locais.RemoveAt(tempLocalRange);
}
}
Eu vi também, que usa dois Random.Range um para position e outro para rotation, no caso não sei se era isso o desejado, mas coloquei o range cacheado para a posição e rotação iguais, caso queira diferente só criar outro inteiro e cachear outro range.
Obs: eu troquei de Array, para Lists, pois elas que contém a função RemoveAt.
Obrigado pela ajuda mano, mas ainda não entendi como funciona, pois nunca usei List...Fiz umas alterações no script pois dava erro no Length.
Agora, não sei usar adicionar em numa nova igual vc falou, tentei com o Add, mas não deu certo.
- Código:
public List<GameObject> locais;
public List<GameObject> enemy;
private float cronometro;
public float tempo;
void Update () {
cronometro += Time.deltaTime;
if (cronometro >= Random.Range(tempo, 8f)){
cronometro = 0;
int tempEnemyRange = Random.Range (0,enemy.Count); //substitui o Length pelo Count, dai funcionou.
int tempLocalsRange = Random.Range(0, locais.Count); //substitui o Length pelo Count, dai funcionou.
Instantiate (enemy[tempEnemyRange], locais[tempLocalsRange].transform.position, locais[tempLocalsRange].transform.rotation);
enemy.RemoveAt(tempEnemyRange);
locais.RemoveAt(tempLocalsRange);
}
}
Hardencio- Avançado
- PONTOS : 3720
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Não repetir objeto no Spawn
Desculpe-me o equivoco, fiz de cabeça e com sono, dá nisso kasksaksa.
Em questão de clonar, você teria que adicionar mais listas de acordo com o que for sendo spawnado, que no caso são 2 listas e clona-nas de acordo, ex:
Com isso, as listas serão clonas de acordo com as outras já declaradas, quando o Count da lista, chegar a 0(a lista estiver vazia), você faz esse mesmo processo, para que ela retorne novamente com todos os locais e inimigos novamente!
Em questão de clonar, você teria que adicionar mais listas de acordo com o que for sendo spawnado, que no caso são 2 listas e clona-nas de acordo, ex:
- Código:
private List<GameObject> tempLocals;
private List<GameObject> tempEnemys;
void Start(){
tempLocals = new List<GameObject>(locais);
tempEnemys = new List<GameObject>(enemy);
}
Com isso, as listas serão clonas de acordo com as outras já declaradas, quando o Count da lista, chegar a 0(a lista estiver vazia), você faz esse mesmo processo, para que ela retorne novamente com todos os locais e inimigos novamente!
Re: Não repetir objeto no Spawn
Não se desculpe, vc fez de cabeça, significa que manja hahaha
E como faço para verificar se a lista está vazia?
E como faço para verificar se a lista está vazia?
Hardencio- Avançado
- PONTOS : 3720
REPUTAÇÃO : 25
Áreas de atuação : Advergames and Casual Games
Respeito as regras :
Re: Não repetir objeto no Spawn
Há várias maneiras, mas o mais simples é pela variável Count, quando vazia seu valor fica = 0;
Tópicos semelhantes
» Ajuda com spawn de objeto
» Spawn de objeto por toque(Smartphone)
» [iniciante] Como gerar 3 valores específicos aleatoriamente sem repetir?
» Random sem repetir a palavra
» Como fazer para interagir um objeto com um outro objeto [Estilo Granny]
» Spawn de objeto por toque(Smartphone)
» [iniciante] Como gerar 3 valores específicos aleatoriamente sem repetir?
» Random sem repetir a palavra
» Como fazer para interagir um objeto com um outro objeto [Estilo Granny]
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos