How to randomly instantiate other prefabs parallel?

I’m making this game where you have slide down platforms (that are parallel) but had problems with generation. I made a little script that generates 10 of the same platforms parallel. But how do I randomly instantiate other prefabs? I tried with a random number generator and if statements but then the platforms wouldn’t be parallel anymore.

My script:

[SerializeField] private Transform platforGen1;
[SerializeField] private Transform platforGen2;
[SerializeField] private Transform platforGen3;
[SerializeField] private Transform platforGen4;

[HideInInspector] private float nextPlatformYCord = 0f;
[HideInInspector] private float nextPlatformXCord = 0f;
private float numOfPlatforms = 10f;
int x = 1;

private void Awake()
{
    do
    {
        SpawnPlatforGen1(new Vector2(10.33815f, -3.778132f) + new Vector2(nextPlatformXCord, nextPlatformYCord));
        nextPlatformXCord += 16.31f;
        nextPlatformYCord -= 10.49f;
        x++;
    } while (x <= numOfPlatforms);

    }
private void SpawnPlatforGen1(Vector2 spawnPosition)
{
    Instantiate(platforGen1, spawnPosition, Quaternion.identity);
}

One way you could do this is by placing all of your prefabs into an array.

[SerializeField] private Transform[] platformPrefabs;

Then you could create a random number generator to select a random prefab from this group based on the object’s index in the array. This range is 0 → length of array - 1 so we can create our generator in a scalable fashion like this:

Transform prefabToSpawn = platformPrefabs[Random.Range(0, platformPrefabs.length - 1)];

Then just use the instantiate function like you’ve used above to spawn a random object out of the array.


It’s been a while since I used Unity all the time but this should do the job. Here’s your code modified to fit this style:

[SerializeField] private Transform[] platformPrefabs;
 [HideInInspector] private float nextPlatformYCord = 0f;
 [HideInInspector] private float nextPlatformXCord = 0f;
 
//you were comparing a float to an int so I fixed that, unless you very specifically want to have like 10.5 platforms
private int numOfPlatforms = 10f; 
 int x = 1;
 private void Awake()
 {
     do
     {
         SpawnPlatforGen1(new Vector2(10.33815f, -3.778132f) + new Vector2(nextPlatformXCord, nextPlatformYCord));
         nextPlatformXCord += 16.31f;
         nextPlatformYCord -= 10.49f;
         x++;
     } while (x <= numOfPlatforms);
     }
 private void SpawnPlatforGen1(Vector2 spawnPosition)
 {
     Transform platformToSpawn = platformPrefabs[Random.Range(0, platformPrefabs.Length)];
     Instantiate(platformToSpawn, spawnPosition, Quaternion.identity);
 }