I have floor that spawns and destroys on collision with a destroyer but I use a list to translate each floor object and it seems that the new items aren't being added to the list properly? Here are the 2 scripts controlling this: Code (CSharp): public class FloorMovement : MonoBehaviour { public GameObject[] tiles; public List<GameObject> ts; public int speed; public GameObject[] obstacles; GameObject obsInQues; private void Start() { GameObject floor1 = Instantiate(obstacles[0], new Vector3(0, 0, 0), Quaternion.identity); ts.Add(floor1); GameObject floor2 = Instantiate(obstacles[0], new Vector3(0, 0, 60), Quaternion.identity); ts.Add(floor2); GameObject floor3 = Instantiate(obstacles[0], new Vector3(0, 0, 120), Quaternion.identity); ts.Add(floor3); GameObject floor4 = Instantiate(obstacles[0], new Vector3(0, 0, 180), Quaternion.identity); ts.Add(floor4); } private void Update() { moveFloor(); } public void moveFloor() { tiles = ts.ToArray(); for (int i = 0; i <= tiles.Length; i++) { GameObject tile = tiles[i]; tile.transform.Translate(0, 0, -speed); } } public void SpawnObstacle() { int obs = Random.Range(0, obstacles.Length); GameObject currentObs = Instantiate(obstacles[obs], new Vector3(0, 0, 240), Quaternion.identity); ts.Add(currentObs); Debug.Log("floor piece added"); } } Code (CSharp): public class Destroyer : MonoBehaviour { private void OnCollisionEnter(Collision collision) { FloorMovement removeFloorFromList = FindObjectOfType<FloorMovement>(); removeFloorFromList.ts.Remove(collision.gameObject); Debug.Log("Collision"); Destroy(collision.gameObject); Create(); } private void Create() { FloorMovement CreateObs = FindObjectOfType<FloorMovement>(); CreateObs.SpawnObstacle(); } }