- 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
![](https://koobas.hobune.stream/wayback/20220613002413im_/https://answers.unity.com/themes/thub/images/avi.jpg)
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