[Ajuda] Não spawnar o mesmo prefab seguido.
2 participantes
Página 1 de 1
[Ajuda] Não spawnar o mesmo prefab seguido.
Olá, tenho um script que spawna prefabs diferentes e aleatóriamente, só que as vezes ele spawna o mesmo prefab seguindo, fazendo com o que já está spawnado desapareca no meio da tela e spawne no lugar de origem, alguém sabe como resolvo esse problema?
Script:
Script:
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ObstaclesSpawn : MonoBehaviour {
public float rateSpawn;
public float maxWidth, minWidth;
public int maxSpawnPrefabs;
public GameObject[] obstaclePrefab;
public List<GameObject> prefab;
private float currentRateSpawn;
void Start () {
for (int i = 0; i < maxSpawnPrefabs; i++) {
GameObject tempObstacle = Instantiate (obstaclePrefab[i]) as GameObject;
prefab.Add (tempObstacle);
tempObstacle.SetActive (false);
}
}
// Update is called once per frame
void Update () {
currentRateSpawn += Time.deltaTime;
if (currentRateSpawn > rateSpawn) {
currentRateSpawn = 0;
Spawn ();
}
}
private void Spawn(){
float randWidth = Random.Range (minWidth, maxWidth);
int randSpawnObstacle = Random.Range (0, obstaclePrefab.Length);
GameObject tempObstacle = null;
for (int i = 0; i < maxSpawnPrefabs; i++) {
if (prefab [i].activeSelf == false) {
tempObstacle = prefab [randSpawnObstacle];
break;
}
}
if (tempObstacle != null) {
tempObstacle.transform.position = new Vector3 (randWidth, transform.position.y, transform.position.z);
tempObstacle.SetActive (true);
}
}
}
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
hahaha, já vi algo parecido em uma série de Flappy Bird do Paulo(wemakeagame)
Já tentou aumentar o valor da variável "maxSpawnPrefabs"??? Eh uma lógica bastante simples
Já tentou aumentar o valor da variável "maxSpawnPrefabs"??? Eh uma lógica bastante simples
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
MarcosSchultz escreveu:hahaha, já vi algo parecido em uma série de Flappy Bird do Paulo(wemakeagame)
Já tentou aumentar o valor da variável "maxSpawnPrefabs"??? Eh uma lógica bastante simples
Eu peguei esse script dele mesmo, só fiz umas mudanças pra spawnar prefabs diferentes hehehe....
Já tentei sim, mas alem de dar um erro de "IndexOutOfRangeException", ele continua spawnando os mesmos prefabs seguidos algumas vezes :/
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
Provavelmente está dando erro de inxex por causa desta variável:
obstaclePrefab
Ela é uma array e participa do for do spawn... Na verdade, teria que fazer o mesmo número de obstáculos ou instanciar esta variavle com Random.Range em vez de pegar o index do for
obstaclePrefab
Ela é uma array e participa do for do spawn... Na verdade, teria que fazer o mesmo número de obstáculos ou instanciar esta variavle com Random.Range em vez de pegar o index do for
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
Mas mesmo com o erro, ele ainda spawna os objetos, porem não deixa de repetir os numeros algumas vezes
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
Os obstáculos podem repetir??? se sim, vou refazer este script ai
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
Podem, só não podem desaparecer no meio da tela
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
.
Última edição por ismarspn em Dom Jan 24, 2016 5:27 pm, editado 1 vez(es)
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
ismarspn escreveu:Podem, só não podem desaparecer no meio da tela(desculpe o post duplo, foi sem querer e não tem a opção de apagar :/).
Edite ué, kkkkkk
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ObstaclesSpawn : MonoBehaviour {
public float tempoPorSpawn = 2;
public float larguraMaxima, larguraMinima;
public int maximoDeSpawnsAtivos = 20;
public GameObject[] obstaculos;
private List<GameObject> prefabsTotais = new List<GameObject> ();
private float tempoCorrenteEntreSpawns;
private int obstaculoAtual;
void Start () {
tempoCorrenteEntreSpawns = 0;
obstaculoAtual = 0;
for (int i = 0; i < maximoDeSpawnsAtivos; i++) {
GameObject tempObstacle = Instantiate (obstaculos[Random.Range (0, obstaculos.Length)]) as GameObject;
prefabsTotais.Add (tempObstacle);
tempObstacle.SetActive (false);
}
}
void Update () {
tempoCorrenteEntreSpawns += Time.deltaTime;
if (tempoCorrenteEntreSpawns > tempoPorSpawn) {
tempoCorrenteEntreSpawns = 0;
Spawn ();
}
}
private void Spawn(){
prefabsTotais[obstaculoAtual].transform.position = new Vector3 (Random.Range (larguraMinima, larguraMaxima), transform.position.y, transform.position.z);
prefabsTotais[obstaculoAtual].SetActive (true);
obstaculoAtual++;
if (obstaculoAtual >= maximoDeSpawnsAtivos) {
obstaculoAtual = 0;
}
}
}
Re: [Ajuda] Não spawnar o mesmo prefab seguido.
Funcionou lindamente, Marcos! Muito obrigado! :DMarcosSchultz escreveu:ismarspn escreveu:Podem, só não podem desaparecer no meio da tela(desculpe o post duplo, foi sem querer e não tem a opção de apagar :/).
Edite ué, kkkkkk
- Código:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ObstaclesSpawn : MonoBehaviour {
public float tempoPorSpawn = 2;
public float larguraMaxima, larguraMinima;
public int maximoDeSpawnsAtivos = 20;
public GameObject[] obstaculos;
private List<GameObject> prefabsTotais = new List<GameObject> ();
private float tempoCorrenteEntreSpawns;
private int obstaculoAtual;
void Start () {
tempoCorrenteEntreSpawns = 0;
obstaculoAtual = 0;
for (int i = 0; i < maximoDeSpawnsAtivos; i++) {
GameObject tempObstacle = Instantiate (obstaculos[Random.Range (0, obstaculos.Length)]) as GameObject;
prefabsTotais.Add (tempObstacle);
tempObstacle.SetActive (false);
}
}
void Update () {
tempoCorrenteEntreSpawns += Time.deltaTime;
if (tempoCorrenteEntreSpawns > tempoPorSpawn) {
tempoCorrenteEntreSpawns = 0;
Spawn ();
}
}
private void Spawn(){
prefabsTotais[obstaculoAtual].transform.position = new Vector3 (Random.Range (larguraMinima, larguraMaxima), transform.position.y, transform.position.z);
prefabsTotais[obstaculoAtual].SetActive (true);
obstaculoAtual++;
if (obstaculoAtual >= maximoDeSpawnsAtivos) {
obstaculoAtual = 0;
}
}
}
ismarspn- Programador
- PONTOS : 3999
REPUTAÇÃO : 147
Idade : 30
Áreas de atuação : Unity, Photoshop, Illustrator, After Effects, Adobe Flash
Respeito as regras :
Tópicos semelhantes
» Spawnar objeto a 1 metro de distancia de mim
» Mesmo PreFab, sendo aliado e inimigo
» Ajuda com Prefab Urgente!!
» 2 Objetos no mesmo spawner ao mesmo tempo
» Spawnar Objetos aleatorios em lugares pre-definidos
» Mesmo PreFab, sendo aliado e inimigo
» Ajuda com Prefab Urgente!!
» 2 Objetos no mesmo spawner ao mesmo tempo
» Spawnar Objetos aleatorios em lugares pre-definidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos