# Random.range multiple instantiations without repetition

Hello all, Ive been at this for the last day or so, and its starting to bug me - I have no problem instantiating several random game objects out of an array of multiple game objects, I can grasp the random.range with no problem, but when it comes to making sure the same game objects aren’t instantiated more that once, I’m having difficulty, Ive tried a few scripts across the net but am having trouble… Could anybody give me a hand?

Heres my code:

var bodyParts : GameObject;

``````function GenerateBodyParts() {
var bodyPartsNum : int = Random.Range(0, bodyParts.length);
for (var i = 0; i < 3; i++) {
Instantiate(bodyParts[bodyPartsNum], transform.position + Vector3(0.05,0.05,-0.9), Quaternion.identity);
}
``````

}

I’d really appreciate some help guys, in JS if possible as I’m not very competent in any other language at the moment.

I know there are scripts out there but i can’t seem to get them to work for this function, i.e. multiple random instantiations.

Cheers - monster.

Tested it and it works. Added a 1 second wait just so you could tell the order was random.

``````var bodyParts : GameObject[];

function Start()
{
GenerateBodyParts();
}

function GenerateBodyParts() {
//make a copy of the original one
//since we will be removing them from the array when we create them
var bodyPartsCopy : GameObject[] = bodyParts;

//loop through each bodypart
for (var i = 0; i < bodyParts.Length; i++) {
//pick a random index
var bodyPartsNum : int = Random.Range(0, bodyPartsCopy.Length-1);
//instantiate the bodypart
yield WaitForSeconds(1);
Instantiate(bodyPartsCopy[bodyPartsNum], transform.position + Vector3(0.05,0.05,-0.9), Quaternion.identity);

//now need to remove the bodypart from the array so we don't create it again
//but we need to make it a JS array first, remove it, then convert back to a builtin array to be used by unity
var bodyPartsJS : Array = bodyPartsCopy;
bodyPartsJS.RemoveAt(bodyPartsNum);
bodyPartsCopy = bodyPartsJS;

}
}
``````