- Home /
Solved it myself
random spawning of platforms. Overlapping and 2x2 spawning issue.
So in my quest to make a game like the very popular zigzag game, I am stuck at randomly generating platforms. The platforms generate randomly in X,-X,Z,-Z directions. I have written my code where it generates the platforms. I might have taken a very long approach (alternative approaches if any)
              void Start () 
             {
                 lastPos = platform.transform.position;
                 size = platform.transform.localScale.x;
                 InvokeRepeating("SpawnXZ",1f,0.2f);
             }
             void SpawnX()
             {   
                 Vector3 pos = lastPos;
                 pos.x += size;
                 lastPos = pos;
                 Instantiate(platform, pos, Quaternion.identity);    
             }
             void SpawnZ()
             {
                 Vector3 pos = lastPos;
                 pos.z += size;
                 lastPos = pos;
                 Instantiate(platform, pos, Quaternion.identity); 
             }
             void SpawnNegX()
             {
                 Vector3 pos = lastPos;
                 pos.x -= size;
                 lastPos = pos;
                 Instantiate(platform, pos, Quaternion.identity);  
             }
             void SpawnNegZ()
             {
                 Vector3 pos = lastPos;
                 pos.z -= size;
                 lastPos = pos;
                 Instantiate(platform, pos, Quaternion.identity);
             }
             void SpawnXZ()
             {
                     int rand = Random.Range(0, 6);
                     if (rand < 3)
                     {
                             SpawnX();
                     }
                     else if(rand >= 3)
                     {
                             SpawnZ();
                     }
                     if(--counter == 0) { CancelInvoke("SpawnXZ"); };
                 if(counter == 0)
                 {   
                     counter = 25;
                     int r = Random.Range(0,2);
                     if(r == 0)
                     {   
                         InvokeRepeating("SpawnNegXZ",0f,0.2f);
                     }
                     else
                     {       
                         InvokeRepeating("SpawnXNegZ",0f,0.2f);
                     }
                 }
             }
             void SpawnNegXZ()
             {
                 int rand = Random.Range(0, 6);
                     if (rand < 3)
                     {   
                             SpawnNegX();
                     }
                     else if(rand >= 3)
                     {   
                             SpawnZ();
                     }
                 if(--counter == 0) { CancelInvoke("SpawnNegXZ"); };
                 if(counter == 0)
                 {   
                     counter = 25;
                     int r = Random.Range(0,2);
                     if(r == 0)
                     {   
                         InvokeRepeating("SpawnXZ",0f,0.2f);
                     }
                     else
                     {   
                         InvokeRepeating("SpawnNegXNegZ",0f,0.2f);
                     }
                 }
             }
             void SpawnXNegZ()
             {
                     int rand = Random.Range(0, 6);
                     if (rand < 3)
                     {   
                             SpawnX();
                     }
                     else if(rand >= 3)
                     {   
                             SpawnNegZ();
                     }       
                 if(--counter == 0) { CancelInvoke("SpawnXNegZ"); };
                 if(counter == 0)
                 {   
                     counter = 25;
                     int r = Random.Range(0,2);
                     if(r == 0)
                     {   
                         InvokeRepeating("SpawnXZ",0f,0.2f);
                     }
                     else
                     {   
                         InvokeRepeating("SpawnNegXNegZ",0f,0.2f);
                     }
                 }
             }
             void SpawnNegXNegZ()
             {
                     int rand = Random.Range(0, 6);
                     if (rand < 3)
                     {
                             SpawnNegX();    
                     }
                     else if(rand >= 3)
                     {   
                             SpawnNegZ();
                     }
                 if(--counter == 0) { CancelInvoke("SpawnNegXNegZ"); };
                 if(counter == 0)
                 {   
                     counter = 25;
                     int r = Random.Range(0,2);
                     if(r == 0)
                     {   
                         InvokeRepeating("SpawnNegXZ",0f,0.2f);
                     }
                     else
                     {   
                         InvokeRepeating("SpawnXNegZ",0f,0.2f);
                     }
                 }
             }
I have clubbed xz, -xz , x -z and -x -z. I call platform spawning in X and Z direction first, then switching to -XZ or x -Z and so on. But there are 2 main issues.

PS : those small black squares are nothing but diamonds (ignore them).
They either form a 2X2 block or overlap each other.
How do I avoid these? or is there a simpler way of generating platforms that I am missing.
Follow this Question
Related Questions
Spawn another platform infront of the original platform 1 Answer
Multiple spawn location with random game object in random time spawn c# 1 Answer
Spawn objects at random position ON a 2D object. 1 Answer
Instantiate random object from Array 2 Answers
Randomly placing an object outside of a box but within a certain range 4 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                