private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load is not set, use the Editor to set it."); } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(StartCoroutine(fader.FadeOut(fadeOutTime))); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); savingWrapper.Load(); Portal targetPortal = GetOtherPortal(); UpdatePlayer(targetPortal); savingWrapper.Save(); // save again once player is positioned at the right spot to avoid backloading through portal yield return(new WaitForSeconds(fadeWaitTime)); // wait to make sure everything loads (and saves) yield return(StartCoroutine(fader.FadeIn(fadeInTime))); Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load not set."); // if the portal doesnt have a scene assigned to it this message pops up yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); // fade out over a series of frames SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); wrapper.Save(); // save current level yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // load over a series of frames wrapper.Load(); // load current level Portal otherPortal = GetOtherPortal(); // update the player UpdatePlayer(otherPortal); wrapper.Save(); // save the current level after you load in so when you restart the game you are right where you left off yield return(new WaitForSeconds(fadeWaitTime)); // wait for a series of frames for the camera to stablelize yield return(fader.FadeIn(fadeInTime)); // fade in over a series of frames Destroy(gameObject); }
private IEnumerator Transition() { DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); //save current level state SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); wrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // load current level state wrapper.Load(); Portal otherPortal = GetOtherportal(); UpdatePlayer(otherPortal); //wrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }
private IEnumerator Transition() { DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); ControlEnabled(false); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneIndexToLoad)); // disable control from new player loaded in scene ControlEnabled(false); savingWrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(fadeOutWait)); yield return(fader.FadeIn(fadeInTime)); ControlEnabled(true); Destroy(gameObject); }
IEnumerator StartTransitioning() { if (sceneToLoadIndex < 0) { Debug.LogError("Scene To Load is not set correctly."); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); // Fade Out yield return(fader.FadeOut(fadeOutTime)); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoadIndex)); savingWrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayerTransform(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }
private IEnumerator Transition() { //DontDestroyOnLoad não funciona quando o GameObject é filho de alguma coisa transform.parent = null; if (sceneToLoad < 0) { Debug.LogError("Scene to load not set"); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }
private IEnumerator SceneTransition() { DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); wrapper.Save(); yield return(SceneManager.LoadSceneAsync(targetScene)); wrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); wrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }
private IEnumerator LoadLevel() { if (sceneIndex < 0) { Debug.LogError("Scene index is invalid"); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(StartCoroutine(fader.FadeOut(fadeOutTime))); yield return(SceneManager.LoadSceneAsync(sceneIndex)); Portal otherPortal = GetOtherPortal(); UpdatePlayerPosition(otherPortal); Debug.Log("Scene Loaded"); yield return(new WaitForSeconds(fadeWaitTime)); yield return(StartCoroutine(fader.FadeIn(fadeInTime))); Destroy(gameObject); }
private IEnumerator Transition() { Fader fader = FindObjectOfType <Fader>(); SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); PlayerController playerController = FindObjectOfType <PlayerController>(); playerController.enabled = false; DontDestroyOnLoad(this.gameObject); yield return(fader.FadeOut(fadeInTime)); wrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneIndex)); PlayerController newplayerController = FindObjectOfType <PlayerController>(); newplayerController.enabled = false; wrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); wrapper.Save(); yield return(new WaitForSeconds(blackscreenTime)); fader.FadeIn(fadeInTime); newplayerController.enabled = true; Destroy(this.gameObject); }
private IEnumerator Transition() { DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.enabled = false; yield return(fader.FadeOut(fadeOutTime)); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); PlayerController newPlayerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); newPlayerController.enabled = false; Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(fadeInTime); newPlayerController.enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load is not set."); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); if (fader != null) { yield return(fader.FadeOut(fadeOutTime)); } //ToDo uncomment and use after gameJam //Save current level //SavingWrapper wrapper = FindObjectOfType<SavingWrapper>(); //if (wrapper != null) //{ // wrapper.Save(); //} if (currentScene > 0 && currentScene < 5) { PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.enabled = false; } yield return(SceneManager.LoadSceneAsync(sceneToLoad)); PlayerController newPlayerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); newPlayerController.enabled = false; //Load current level //if (wrapper != null) //{ // wrapper.Load(); //} Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); //wrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); if (fader != null) { fader.FadeIn(fadeInTime); } newPlayerController.enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load not set."); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); yield return(fader.FadeOut(fadeOutTime)); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); savingWrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad == -1) { Debug.Log("You have not set the sceneToLoad yet."); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader> (); yield return(fader.FadeOut(fadeOutTime)); SavingWrapper wrapper = FindObjectOfType <SavingWrapper> (); PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController> (); playerController.enabled = false; wrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController> (); playerController.enabled = false; wrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); wrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(fadeInTime); playerController.enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { // Invalid scene index, cannot load new scene if (sceneToLoadIndex < 0) { Debug.LogError("Scene to load is not set"); yield break; } // Preserve this portal until new scene finishes loading DontDestroyOnLoad(gameObject); // Remove player control PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.enabled = false; // Fade out of scene Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); // Save current level SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); savingWrapper.Save(); // Load new scene yield return(SceneManager.LoadSceneAsync(sceneToLoadIndex)); // Remove player control PlayerController newPlayerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); newPlayerController.enabled = false; // Load current level savingWrapper.Load(); // Destination portal in new scene where the player will spawn Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); // Save in the new scene savingWrapper.Save(); // Wait before fading in yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(fadeInTime); // Restore player control newPlayerController.enabled = true; // Scene loaded successfully, destroy previous portal print("Scene loaded"); Destroy(gameObject); }
// should not have to call StartCoroutine() inside a coroutine IEnumerator Transition() { DontDestroyOnLoad(gameObject.transform.parent); Fader fader = FindObjectOfType <Fader>(); // remove old player controller to avoid glitches playerController.enabled = false; yield return(fader.FadeOut(fadeOutTime)); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); // save the current state of the world you are leaving savingWrapper.Save(); // transition to the scene with 'sceneIndex' index yield return(SceneManager.LoadSceneAsync(sceneIndex)); // theoretically removes new player controller to avoid glitches // TODO may need to call gameobject.find again for the new player // if this doesn't work (UPDATE: SO IT ACTUALLY DOESN'T WORK) // playerController.enabled = false; // find the playercontroller in the newly loaded scene playerController = GameObject.Find("Player").GetComponent <PlayerController>(); playerController.enabled = false; // load the the last state of the other world you are going to transition to savingWrapper.Load(); print("scene loaded"); Portal otherPortal = GetOtherPortal(); UpdatePlayerToSpawnPoint(otherPortal); // do another save here so that the next time we load the game up // the player will appear by the portal where it last spawned from savingWrapper.Save(); // stall for .5 seconds yield return(new WaitForSeconds(waitTime)); // runs in the background as a coroutine // so that the player controls can be re-enabled // asynchronously fader.FadeIn(fadeInTime); // theoretically restores new player player controller playerController.enabled = true; // destroys the parent gameobject // s.toToggleInPortalClass = true; // DestroyParentGameObj(); }
private IEnumerator Start() { Fader fader = FindObjectOfType <Fader>(); fader.FadeOut(FadeOutTime); yield return(GetComponent <SavingSystem>().LoadLastScene(defaultSaveFile)); yield return(fader.FadeIn(FadeInTime)); }
private IEnumerator LoadMenuScene() { Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); yield return(SceneManager.LoadSceneAsync(menuLevelBuildIndex)); yield return(fader.FadeIn(fadeInTime)); }
private IEnumerator LoadLastScene() { Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); yield return(GetComponent <SavingSystem>().LoadLastScene(GetCurrentSave())); yield return(fader.FadeIn(fadeInTime)); }
public IEnumerator Continue() { print("Continuing.."); yield return(fader.FadeOut(fadeTime)); yield return(savingSystem.LoadLastScene(DEFAULT_SAVE_FILE)); yield return(new WaitForSeconds(fadeTime)); yield return(fader.FadeIn(fadeTime)); }
private IEnumerator Transition() { DontDestroyOnLoad(gameObject); GameObject.FindWithTag("Player").GetComponent <PlayerController>().enabled = false; //fade out Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut()); print("faded out"); //save current level FindObjectOfType <SavingWrapper>().Save(); print("saved"); //load new scene and spawn player yield return(SceneManager.LoadSceneAsync(sceneToLoad)); //AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneToLoad); //while (!asyncLoad.isDone) //{ // yield return null; //} print("scene loaded"); GameObject.FindWithTag("Player").GetComponent <PlayerController>().enabled = false; //load current level FindObjectOfType <SavingWrapper>().Load(); Portal otherPortal = GetOtherPortal(); TeleportPlayerToPortal(otherPortal); FindObjectOfType <SavingWrapper>().Save(); // fade in yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(); GameObject.FindWithTag("Player").GetComponent <PlayerController>().enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { DontDestroyOnLoad(gameObject); // Player from the previous scene PlayerController player = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); player.enabled = false; // Start fading out the new scene yield return(fader.FadeOut(fadeOutTime)); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); savingWrapper.Save(); // Load asynchronously the new scene yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // Player from the new scene PlayerController newPlayer = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); newPlayer.enabled = false; savingWrapper.Load(); // Find the destination portal Portal destinationPortal = GetDestinationPortal(); UpdatePlayer(destinationPortal); savingWrapper.Save(); // Keep the new scene faded out for some time yield return(new WaitForSeconds(fadeWaitTime)); // Start fading in the new scene fader.FadeIn(fadeInTime); // Restore control to the new player newPlayer.enabled = true; // Destroy the portal Destroy(gameObject); }
IEnumerator Transition(GameObject player) { if (sceneToLoad < 0) { Debug.LogError("PORTAL - Transition: SceneToLoad has not been set!"); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader> (); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper> (); Time.timeScale = portalSpeedEffect; player.GetComponent <PlayerController> ().enabled = false; yield return(fader.FadeOut(fadeOutTime)); Time.timeScale = 1f; savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); PlayerController controller = GameObject.FindWithTag("Player").GetComponent <PlayerController> (); controller.enabled = false; savingWrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(fadeInTime); controller.enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { //daha sonrada silinecek if (sceneToLoad < 0) { Debug.LogError("Yükelecek bir Scene yok"); yield break; } //yükleme anında yoketme DontDestroyOnLoad(gameObject); //Fader ncomponentini aldık Fader fader = FindObjectOfType <Fader>(); //sahneyi yavaşça kararıyor yield return(fader.FadeOut(fadeOutTime)); SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); wrapper.Save(); //sahneyi yükledik yield return(SceneManager.LoadSceneAsync(sceneToLoad)); wrapper.Load(); //doğru portal bulundu Portal otherPortal = GetOtherPortal(); //player portala göre konumlandırıldı UpdatePlayer(otherPortal); wrapper.Save(); //sahne karanlık bekliyor yield return(new WaitForSeconds(fadeWaitTime)); //sahne yavaşça aydınlanıyor yield return(fader.FadeIn(fadeInTime)); //objeyi(portal) yok et Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load is not set, check the field on " + gameObject); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); // remove control PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.enabled = false; yield return(fader.FadeOut(fadeOutTime)); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // remove control playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.GetComponent <PlayerController>().enabled = false; savingWrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(timeBetweenFade)); fader.FadeIn(fadeInTime); // restore control playerController.GetComponent <PlayerController>().enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load is not set."); yield break; } DontDestroyOnLoad(this.gameObject); Fader fader = FindObjectOfType <Fader>(); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.enabled = false; yield return(fader.FadeOut(fadeOutTime)); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); PlayerController newPlayerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); newPlayerController.enabled = false; savingWrapper.RestorePlayerAfterSceneChange(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(fadeInTime); newPlayerController.enabled = true; Destroy(this.gameObject); }
/** * 切换scene的函数 * "协程系统"不断的循环调用这个函数,直至没有函数体为止 * 但也有一个问题:拥有这个函数的gameObject因为切换场景而销毁时,这个协程也会停止, 英文原文 * But there is somthing tha is going to stop this from happening * that's the fact that as soon as we load this new scene * at portal game object the one which has the coroutine gets destroyed and so does the coroutine itself * * 1、调用切换scene的函数 * 2、调用切换场景之后的一些函数,比如保存一些数据 */ private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load not set."); yield break; } DontDestroyOnLoad(this.gameObject); Fader fade = GameObject.FindObjectOfType <Fader>(); SavingWrapper wrapper = GameObject.FindObjectOfType <SavingWrapper>(); var playerController = GameObject.FindObjectOfType <PlayerController>(); playerController.enabled = false; yield return(fade.FadeOut(fadeOutTime)); wrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); var newPlayerController = GameObject.FindObjectOfType <PlayerController>(); newPlayerController.enabled = false; wrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); // another save for reload scene wrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); fade.FadeIn(fadeInTime); newPlayerController.enabled = true; Destroy(this.gameObject); }
private IEnumerator Transition() { Fader fader = FindObjectOfType <Fader>(); DontDestroyOnLoad(gameObject); yield return(fader.FadeOut(fadeOutTime)); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); SavingWrapper savingWrapper = FindObjectOfType <SavingWrapper>(); PlayerController playerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); playerController.enabled = false; yield return(fader.FadeOut(fadeOutTime)); savingWrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // pauses the coroutine until LoadScene is finished PlayerController newPlayerController = GameObject.FindWithTag("Player").GetComponent <PlayerController>(); newPlayerController.enabled = false; savingWrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); savingWrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); fader.FadeIn(fadeInTime); newPlayerController.enabled = true; Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load not set."); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); // Fade out yield return(StartCoroutine(fader.FadeOut(fadeOutTime))); // Save current SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); wrapper.Save(); // Load new Scene yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // Load current level wrapper.Load(); Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); wrapper.Save(); // Wait for a few seconds // load? yield return(new WaitForSeconds(fadeWaitTime)); // Fade In yield return(StartCoroutine(fader.FadeIn(fadeInTime))); Destroy(gameObject); }
private IEnumerator Transition() { if (sceneToLoad < 0) { Debug.LogError("Scene to load not set."); yield break; } DontDestroyOnLoad(gameObject); Fader fader = FindObjectOfType <Fader>(); yield return(fader.FadeOut(fadeOutTime)); // save current level SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); wrapper.Save(); yield return(SceneManager.LoadSceneAsync(sceneToLoad)); // a solution designed by Will Norton to solve // an error regarding a MissingReferenceException for SavingWrapper wrapper = FindObjectOfType <SavingWrapper>(); // load current level wrapper.Load(); // move the player Portal otherPortal = GetOtherPortal(); UpdatePlayer(otherPortal); wrapper.Save(); yield return(new WaitForSeconds(fadeWaitTime)); yield return(fader.FadeIn(fadeInTime)); Destroy(gameObject); }