protected IEnumerator Transition(string newSceneName, bool resetInputValues, SceneTransitionDestination.DestinationTag destinationTag, TransitionPoint.TransitionType transitionType = TransitionPoint.TransitionType.DifferentZone) { m_Transitioning = true; PersistentDataManager.SaveAllData(); if (m_PlayerInput == null) { m_PlayerInput = FindObjectOfType <PlayerInput>(); } m_PlayerInput.ReleaseControl(resetInputValues); yield return(StartCoroutine(ScreenFader.FadeSceneOut(ScreenFader.FadeType.Loading))); PersistentDataManager.ClearPersisters(); yield return(SceneManager.LoadSceneAsync(newSceneName)); m_PlayerInput = FindObjectOfType <PlayerInput>(); m_PlayerInput.ReleaseControl(resetInputValues); PersistentDataManager.LoadAllData(); SceneTransitionDestination entrance = GetDestination(destinationTag); SetEnteringGameObjectLocation(entrance); SetupNewScene(transitionType, entrance); if (entrance != null) { entrance.OnReachDestination.Invoke(); } yield return(StartCoroutine(ScreenFader.FadeSceneIn())); m_PlayerInput.GainControl(); m_Transitioning = false; }
void Awake() { if (Instance != this) { Destroy(gameObject); return; } DontDestroyOnLoad(gameObject); m_PlayerInput = FindObjectOfType <PlayerInput>(); if (initialSceneTransitionDestination != null) { SetEnteringGameObjectLocation(initialSceneTransitionDestination); ScreenFader.SetAlpha(1f); StartCoroutine(ScreenFader.FadeSceneIn()); initialSceneTransitionDestination.OnReachDestination.Invoke(); } else { m_CurrentZoneScene = SceneManager.GetActiveScene(); m_ZoneRestartDestinationTag = SceneTransitionDestination.DestinationTag.A; } }
//Corutina llamada a partir de los T# anteriores protected IEnumerator Transition(GameObject transitioningGameObject, bool releaseControl, bool resetInputValues, Vector3 destinationPosition, bool fade) { m_Transitioning = true;//inicio la transicion del jugador //control suelto? no porque t2 lo mando en falso if (releaseControl) { if (m_PlayerInput == null) { m_PlayerInput = FindObjectOfType <PlayerInput> (); } m_PlayerInput.ReleaseControl(resetInputValues); } //falso desde t2 if (fade) { yield return(StartCoroutine(ScreenFader.FadeSceneOut())); //ponga en negro } //el jugador se le asigna la nueva posicion transitioningGameObject.transform.position = destinationPosition; if (fade)//ponga en transparente { yield return(StartCoroutine(ScreenFader.FadeSceneIn())); } //Recupere el control del personaje if (releaseControl) { m_PlayerInput.GainControl(); } m_Transitioning = false;//acabo la transición del jugador }
void Awake() { //si la instancia creada es diferente de este script destruyalo if (Instance != this) { Destroy(gameObject); return; } //sino No destruya el objeto DontDestroyOnLoad(gameObject); m_PlayerInput = FindObjectOfType <PlayerInput>(); //Si esta vacio el proximo destino entre y encuentre el destino //Sirve por si quiero configurar una escena inicial if (initialSceneTransitionDestination != null) { SetEnteringGameObjectLocation(initialSceneTransitionDestination); ScreenFader.SetAlpha(1f); //establece en 1 es decir en negro StartCoroutine(ScreenFader.FadeSceneIn()); initialSceneTransitionDestination.OnReachDestination.Invoke(); //llama al metodo en SceneTransition...invoca un evento se puede ver en la jerarquia de los gameobjects TransitionDestinationA..B..C } else// si no configure escena inicial coja la escena activa (generalmente entra aqui, buena idea para que Alucard empiece de una en la escena que abra) { m_CurrentZoneScene = SceneManager.GetActiveScene(); //Coja la escena activa m_ZoneRestartDestinationTag = SceneTransitionDestination.DestinationTag.A; // Y pongala en el punto A de dicha Escena } }//fin awake
//Corutina de Transicion de escena lo incialisa el metodo TransitionToScene y RestartZone arriba, protected IEnumerator Transition(string newSceneName, bool resetInputValues, SceneTransitionDestination.DestinationTag destinationTag, TransitionPoint.TransitionType transitionType = TransitionPoint.TransitionType.DifferentZone) { m_Transitioning = true; PersistentDataManager.SaveAllData();//salve todos los datos //si el input esta vacio encuentrelo if (m_PlayerInput == null) { m_PlayerInput = FindObjectOfType <PlayerInput>(); } m_PlayerInput.ReleaseControl(resetInputValues); //Pierde el control del input liberelo reseteando los valores yield return(StartCoroutine(ScreenFader.FadeSceneOut(ScreenFader.FadeType.Loading))); //Llame la corutina de FadeSceneOut de tipo Loading PersistentDataManager.ClearPersisters(); yield return(SceneManager.LoadSceneAsync(newSceneName)); //carge la nueva escena asincronicamente m_PlayerInput = FindObjectOfType <PlayerInput>(); //encuentre el input m_PlayerInput.ReleaseControl(resetInputValues); //libere y resetee valores PersistentDataManager.LoadAllData(); //carge todos los datos SceneTransitionDestination entrance = GetDestination(destinationTag); //en una variable de tipo scirpt SceneTransitio...obtenga el destino llamando el metodo protegido mas abajo SetEnteringGameObjectLocation(entrance); //le paso como variable lo recogido en el metodo anterior, este nuevo metodo es llamado mas abajo SetupNewScene(transitionType, entrance); //configure la nueva escena, metodo mas abajo if (entrance != null) //en caso de que siga vacio { entrance.OnReachDestination.Invoke(); //entrance es una instancia de SceneTransitionDest... que luego llama que llama al campo OnReach.invoke que son un evento de Unity } //Es como un llamado para asegurarse que si encunter el destino, en el inpector se especifica, ademas de llamar al script CharacterStateSetter que permite configurar al personaje una vez entre(posicion, animador, etc). yield return(StartCoroutine(ScreenFader.FadeSceneIn())); //fadeIn m_PlayerInput.GainControl(); //obtenga control nuevamente m_Transitioning = false; }
protected IEnumerator Transition(GameObject transitioningGameObject, bool releaseControl, bool resetInputValues, Vector3 destinationPosition, bool fade) { m_Transitioning = true; if (releaseControl) { if (m_PlayerInput == null) { m_PlayerInput = FindObjectOfType <PlayerInput> (); } m_PlayerInput.ReleaseControl(resetInputValues); } if (fade) { yield return(StartCoroutine(ScreenFader.FadeSceneOut())); } transitioningGameObject.transform.position = destinationPosition; if (fade) { yield return(StartCoroutine(ScreenFader.FadeSceneIn())); } if (releaseControl) { m_PlayerInput.GainControl(); } m_Transitioning = false; }
IEnumerator DieRespawnCoroutine(bool resetHealth, bool useCheckPoint, bool shouldRespawn = true) { PlayerInput.Instance.ReleaseControl(true); yield return(new WaitForSeconds(1.0f)); //wait one second before respawing yield return(StartCoroutine(ScreenFader.FadeSceneOut(useCheckPoint ? ScreenFader.FadeType.Black : ScreenFader.FadeType.GameOver))); if (!useCheckPoint) { yield return(new WaitForSeconds(2f)); } if (shouldRespawn) { Respawn(resetHealth, useCheckPoint); yield return(StartCoroutine(ScreenFader.FadeSceneIn())); } }