void Update() { List <LevelAndBounds> removedLevels = new List <LevelAndBounds>(); //Move levels to the left foreach (var level in levels) { GameObject levelObject = level.level; if (levelObject != null) { //Move left levelObject.transform.position += Vector3.left * moveSpeed * Time.deltaTime; level.bounds.center += Vector3.left * moveSpeed * Time.deltaTime; //Destroy level if it is off the screen if (Camera.main.WorldToScreenPoint(level.bounds.center + Vector3.right * level.bounds.extents.x).x < 0) { Destroy(levelObject); removedLevels.Add(level); } } } //Add new level if current level is no longer off screen LevelAndBounds lastLevel = levels[levels.Count - 1]; if (Camera.main.WorldToScreenPoint(lastLevel.bounds.center + Vector3.right * lastLevel.bounds.extents.x).x < Screen.width) { levels.Add(LoadNextLevel()); } //Removed destroyed levels foreach (var level in removedLevels) { levels.Remove(level); } }
int moveSpeedSteps = 5; //Amount of steps between min and max movement speeds void Start() { levels = new List <LevelAndBounds>(); //Get the current levels in the scene foreach (Transform t in transform) { LevelAndBounds level = new LevelAndBounds(t.gameObject, CalculateSpriteBounds(t.gameObject), 0); levels.Add(level); } }