how to be sure that several don't instantiate in the same spot
so I've been having some trouble and I was wondering the way to make sure that they don't spawn in the same spot public GameObject[] cardPlacement = new GameObject[7]; // Number of placements on the table public GameObject[] cards; // The cards, that have to be placed randomly on the table
void Start()
{
int randomPlace1 = Random.Range(0, cardPlacement.Length);
int randomPlace2 = Random.Range(0, cardPlacement.Length);
int randomPlace3 = Random.Range(0, cardPlacement.Length);
int randomPlace4 = Random.Range(0, cardPlacement.Length);
int randomCard = Random.Range(0, cards.Length); // Get Random Card
// Instantiate random card into a random place on the table and position the card on that place
Instantiate(cards[randomCard], cardPlacement[randomPlace1].transform.position, cardPlacement[randomPlace1].transform.rotation);
Instantiate(cards[randomCard], cardPlacement[randomPlace2].transform.position, cardPlacement[randomPlace2].transform.rotation);
Instantiate(cards[randomCard], cardPlacement[randomPlace3].transform.position, cardPlacement[randomPlace3].transform.rotation);
Instantiate(cards[randomCard], cardPlacement[randomPlace4].transform.position, cardPlacement[randomPlace4].transform.rotation);
}
Comment
Best Answer
Answer by cjdev · May 28, 2016 at 04:17 PM
One way you can do this is to keep a list of indices that are still valid to be chosen and choose from that list instead of from the full range. Something like this:
//using System.Collections.Generic;
List<int> validIndices = new List<int>();
for (int i = 0; i < cardPlacement.Length; i++)
validIndices.Add(i);
int randomPlace1 = validIndices[Random.Range(0, validIndices.Count)];
validIndices.Remove(randomPlace1);
int randomPlace2 = validIndices[Random.Range(0, validIndices.Count)];
validIndices.Remove(randomPlace2);
int randomPlace3 = validIndices[Random.Range(0, validIndices.Count)];
validIndices.Remove(randomPlace3);
int randomPlace4 = validIndices[Random.Range(0, validIndices.Count)];
int randomCard = Random.Range(0, cards.Length);
//Instantiate...