Question by
patrickbaumi · Apr 18, 2019 at 08:10 AM ·
randomize
Random objects in a loop after a specific time and without back-to-back-repeats
So I want to spawn random objects ( the goodies), but without one of them spawning back to back. This is the best solution I´ve come up with but now unity freezes when I start the game (also happened with Thread.Sleep). Does anyone have an idea?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Instantiate_House : MonoBehaviour
{
public Transform Spawnpoint;
public GameObject house;
public float spawnTime;
public float spawnDelay;
public GameObject[] pieces;
public int pieceSpawn;
private int i;
void Start()
{
InvokeRepeating("Spawn_House",spawnTime,spawnDelay);
}
void Update()
{
}
public void Spawn_House(){
pieces = new GameObject[8];
pieces[0]=GameObject.Find("GoodieA");
pieces[1]=GameObject.Find("GoodieB");
pieces[2]=GameObject.Find("GoodieC");
pieces[3]=GameObject.Find("GoodieD");
pieces[4]=GameObject.Find("GoodieE");
pieces[5]=GameObject.Find("GoodieF");
pieces[6]=GameObject.Find("GoodieG");
pieces[7]=GameObject.Find("GoodieH");
int i= 8;
pieceSpawn = UnityEngine.Random.Range (0,7);
switch (pieceSpawn)
{
case 0:
pieceSpawn = UnityEngine.Random.Range (1,7);
break;
case 1:
while (pieceSpawn==1)
{
if (pieceSpawn==i)
{
pieceSpawn = UnityEngine.Random.Range (1,7);
}
}
break;
case 2:
while (pieceSpawn==2)
{
if (pieceSpawn==i)
{
pieceSpawn = UnityEngine.Random.Range (0,7);
}
}
break;
case 3:
while (pieceSpawn==3)
{
if (pieceSpawn==i)
{
pieceSpawn = UnityEngine.Random.Range (1,7);
}
}
break;
case 4:
while (pieceSpawn==4)
{
if (pieceSpawn==i)
{
pieceSpawn = UnityEngine.Random.Range (0,7);
}
}
break;
case 5:
while (pieceSpawn==5)
{
if (pieceSpawn==i)
{
pieceSpawn = UnityEngine.Random.Range (0,7);
}
}
break;
case 6:
while (pieceSpawn==6)
{
if (pieceSpawn==i)
{
pieceSpawn = UnityEngine.Random.Range (0,7);
}
}
break;
case 7:
pieceSpawn = UnityEngine.Random.Range (0,6);
break;
default:
pieceSpawn = UnityEngine.Random.Range (0,7);
break;
}
i=pieceSpawn;
GameObject newObject = Instantiate(pieces[pieceSpawn], Spawnpoint.position + new Vector3 (Random.Range (-50,50),0,Random.Range (-50,50)), Spawnpoint.rotation* Quaternion.Euler (90f, 0f, 0f));
Destroy (newObject,7);
}
}
Comment
Your answer
Follow this Question
Related Questions
Random Scenes Without Repetition 1 Answer
Cloned objects choosing different colors 1 Answer
Ramdomly select a variable 1 Answer
Shake GameObject in 0 Answers
Randoming in a Randomed variable 1 Answer