protected override void OnStartTransitionOut() { if (material == null) { return; } _oldSceneTexture = new RenderTexture(Screen.width, Screen.height, 24); //make a copy of allCameras, since we'll be modifying it during iteraion IList <Camera> allCameras = Camera.allCameras.ToList(); _clonedCameras = allCameras.Select(c => CameraUtils.CloneCamera(c).DontDestroyOnLoad()).ToList(); foreach (Camera camera in _clonedCameras) { camera.targetTexture = _oldSceneTexture; camera.Render(); } //we now have the old scene cached in _oldScene }