private IEnumerator NextLevel() { Camera cam = Camera.main; eventSystem.gameObject.SetActive(false); _isTransitioning = true; // makes next background. _nextBackground = MakeSpriteRenderer(backgrounds.RandomOrDefault(), -2); Bounds b = cam.GetOrthographicBounds(); _nextBackground.FitToBounds(new Bounds( b.center + new Vector3(Random.Range(1f, 4f), Random.Range(1f, 4f), 0f), b.size * Random.Range(2f, 3f)), Space.World, true); // makes new foreground objects. int cnt = Random.Range(2, 4); _foregroundObjects = new List<SpriteRenderer>(); for (int i = 0; i < cnt; i++) { StartCoroutine(SpawnAndAddForegroundObject(i, b)); } // zooms out current background to be a new foreground object. if (_currentBackground != null) { StartCoroutine(ScaleAndAddToForegroundObject(_currentBackground)); } // The next background becomes new background. _currentBackground = _nextBackground; _nextBackground.sortingOrder = -1; StartCoroutine(_currentBackground.transform.ScaleFrom(_currentBackground.transform.localScale * 1.5f, 1f, Ease.QuadOut)); // music change musicMixer.requestNextLevel(); soundMixer.playZoomSound(); yield return new WaitForSeconds(1f); _isTransitioning = false; eventSystem.gameObject.SetActive(true); }