- Home /
 
How to make sure certain tiles dont spawn behind eachother
Hello, im programming infinite runner game and i made a script that randomly spawns tiles behind eachother and deletes tiles that are behind the player. That way my player has infinite level which he can run on. But i have tiles with certain PrefabIndexes that cannot be spawned after eachother otherwise it would be impossible to get from one to another. In my Script i wanna add something like : if lastPrefabIndex = 1,2,3 go spawn any tiles except tiles 1,2,3,4 I will be really thankfull for any help or solution.
My Script :
 public GameObject[] tilePrefabs;
 private Transform playerTransform;
 private float SpawnZ = -25.0f;
 private float tileLenght = 50.0f;
 private float safeZone = 55.0f;
 private int amountTilesOnScreen = 9;
 private int lastPrefabIndex = 0;
 private List<GameObject> activeTiles;
 private void Start ()
 {
     activeTiles = new List<GameObject>();
     playerTransform = GameObject.FindGameObjectWithTag("Player").transform;
     for(int i = 0; i < amountTilesOnScreen; i++)
     {
         if (i < 2)
             SpawnTile(0);
         else
             SpawnTile();
     }
 }
 
 // Update is called once per frame
 private void Update () {
     if(playerTransform.position.z - safeZone > (SpawnZ - amountTilesOnScreen* tileLenght))
     {
         SpawnTile();
         DeleteTile();
     }
 }
 private void SpawnTile(int prefabIndex = -1)
 {
     GameObject go;
     if (prefabIndex == -1)
         go = Instantiate(tilePrefabs[RandomPrefabIndex()]) as GameObject;
     else
         go = Instantiate(tilePrefabs[prefabIndex]) as GameObject;
     go.transform.SetParent(transform);
     go.transform.position = Vector3.forward * SpawnZ;
     SpawnZ += tileLenght;
     activeTiles.Add(go);
 }
 private void DeleteTile()
 {
     Destroy(activeTiles[0]);
     activeTiles.RemoveAt(0);
 }
 private int RandomPrefabIndex()
 {
     if (tilePrefabs.Length <= 1)
         return 0;
     int randomIndex = lastPrefabIndex;
     while (randomIndex == lastPrefabIndex)
     {
         randomIndex = Random.Range (0, tilePrefabs.Length);
     }
     lastPrefabIndex = randomIndex;
     return randomIndex;
 }
 
               [1]: /storage/temp/162691-problem.png
Answer by FogCZ · Jul 05, 2020 at 06:48 PM
  private int RandomPrefabIndex()
 {
     if (tilePrefabs.Length <= 1)
         return 0;
     int randomIndex = lastPrefabIndex;
     while (randomIndex == lastPrefabIndex)
     {
         randomIndex = Random.Range(0, tilePrefabs.Length);
     }
     while (lastPrefabIndex == 1 && randomIndex == 1 || lastPrefabIndex == 1 && randomIndex == 2 || lastPrefabIndex == 1 && randomIndex == 3 || lastPrefabIndex == 2 && randomIndex == 1 || lastPrefabIndex == 2 && randomIndex == 2 || lastPrefabIndex == 2 && randomIndex == 3 || lastPrefabIndex == 3 && randomIndex == 1 || lastPrefabIndex == 3 && randomIndex == 2 || lastPrefabIndex == 3 && randomIndex == 3 )
 
              Your answer
 
             Follow this Question
Related Questions
Assigning joints connected body 0 Answers
Help attaching object to players hand 1 Answer
When I enable certain scripts on my player, the transform falls through the map. 0 Answers
Function not excuting dispite being called 0 Answers
FPS recoil 1 Answer