예제 #1
0
        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;
            }
        }
예제 #2
0
        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
예제 #3
0
        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;
        }
예제 #4
0
        //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;
        }
예제 #5
0
 protected SceneTransitionDestination GetDestination(SceneTransitionDestination.DestinationTag destinationTag)
 {
     SceneTransitionDestination[] entrances = FindObjectsOfType <SceneTransitionDestination>();
     for (int i = 0; i < entrances.Length; i++)
     {
         if (entrances[i].destinationTag == destinationTag)
         {
             return(entrances[i]);
         }
     }
     Debug.LogWarning("No entrance was found with the " + destinationTag + " tag.");
     return(null);
 }
    protected IEnumerator TransitionInternal(string newSceneName, SceneTransitionDestination.DestinationTag tag)
    {
        if (newSceneName != SceneManager.GetActiveScene().name)
        {
            yield return(SceneManager.LoadSceneAsync(newSceneName));
        }

        PlayerMovement             player = FindPlayerInput();
        SceneTransitionDestination sceneTransitionDestination = GetDestination(tag);
        TransitionPoint            transitionPoint            = sceneTransitionDestination.gameObject.GetComponent <TransitionPoint>();

        if (transitionPoint != null)
        {
            transitionPoint.canTransition = false;
        }
        player.transform.position = sceneTransitionDestination.transform.position;
        yield break;
    }
예제 #7
0
 //初始化当前关卡信息,重生点信息
 protected void SetZoneStart(SceneTransitionDestination entrance)
 {
     m_CurrentZoneScene          = entrance.gameObject.scene;
     m_ZoneRestartDestinationTag = entrance.destinationTag;
 }
예제 #8
0
 public static SceneTransitionDestination GetDestinationFromTag(SceneTransitionDestination.DestinationTag destinationTag)
 {
     return(Instance.GetDestination(destinationTag));
 }
 public static void Transition(string newSceneName, SceneTransitionDestination.DestinationTag tag)
 {
     Instance.StartCoroutine(Instance.TransitionInternal(newSceneName, tag));
 }
 protected void SetLevelStart(SceneTransitionDestination entrance)
 {
     currentLevelScene          = entrance.gameObject.scene;
     levelRestartDestinationTag = entrance.destinationTag;
 }