/// <summary> /// Loads a scene and calls an internal delegate when done. The delegate is /// used by the LoadNeighbors() method. /// </summary> /// <param name="sceneName">Scene name.</param> /// <param name="loadedHandler">Loaded handler.</param> /// <param name="distance">Distance from the current scene.</param> private void Load(string sceneName, InternalLoadedHandler loadedHandler, int distance) { if (IsLoaded(sceneName)) { if (loadedHandler != null) { loadedHandler(sceneName, distance); } return; } m_loading.Add(sceneName); if (logDebugInfo && distance > 0) { Debug.Log("Scene Streamer: Loading " + sceneName + "."); } #if UNITY_4_6 || UNITY_4_7 if (Application.HasProLicense()) { StartCoroutine(LoadAdditiveAsync(sceneName, loadedHandler, distance)); } else { StartCoroutine(LoadAdditive(sceneName, loadedHandler, distance)); } #else StartCoroutine(LoadAdditiveAsync(sceneName, loadedHandler, distance)); #endif }
/// (Unity Pro) Runs Application.LoadLevelAdditiveAsync() and calls FinishLoad() when done. private IEnumerator LoadAdditiveAsync(string sceneName, InternalLoadedHandler loadedHandler, int distance) { AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); onLoading.Invoke(sceneName, asyncOperation); yield return(asyncOperation); FinishLoad(sceneName, loadedHandler, distance); }
/// <summary> /// <para>Ejecuta Application.LoadLevelAdditiveAsync() y llama a FinishLoad() cuando se realiza.</para> /// </summary> /// <param name="sceneName">Nombre escena.</param> /// <param name="loadedHandler">Delegado.</param> /// <param name="distance">Distancia.</param> private IEnumerator LoadAdditiveAsync(string sceneName, InternalLoadedHandler loadedHandler, int distance) // Ejecuta Application.LoadLevelAdditiveAsync() y llama a FinishLoad() cuando se realiza { AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); onLoading.Invoke(sceneName, asyncOperation); yield return(asyncOperation); FinishLoad(sceneName, loadedHandler, distance); }
/// (Unity) Runs Application.LoadLevelAdditive() and calls FinishLoad() when done. /// This coroutine waits two frames to wait for the load to complete. private IEnumerator LoadAdditive(string sceneName, InternalLoadedHandler loadedHandler, int distance) { SceneManager.LoadScene(sceneName, LoadSceneMode.Additive); onLoading.Invoke(sceneName, null); yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); FinishLoad(sceneName, loadedHandler, distance); }
/// <summary> /// <para>Ejecuta Application.LoadLevelAdditiveAsync() y llama a FinishLoad() cuando se realiza.</para> /// </summary> /// <param name="sceneName">Nombre escena.</param> /// <param name="loadedHandler">Delegado.</param> /// <param name="distance">Distancia.</param> private IEnumerator LoadAdditive(string sceneName, InternalLoadedHandler loadedHandler, int distance) // Ejecuta Application.LoadLevelAdditiveAsync() y llama a FinishLoad() cuando se realiza { SceneManager.LoadScene(sceneName, LoadSceneMode.Additive); onLoading.Invoke(sceneName, null); yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); FinishLoad(sceneName, loadedHandler, distance); }
/// <summary> /// (Unity Pro) Runs Application.LoadLevelAdditiveAsync() and calls FinishLoad() when done. /// </summary> /// <param name="sceneName">Scene name.</param> /// <param name="loadedHandler">Loaded handler.</param> /// <param name="distance">Distance.</param> private IEnumerator LoadAdditiveAsync(string sceneName, InternalLoadedHandler loadedHandler, int distance) { #if UNITY_4_6 || UNITY_4_7 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 AsyncOperation asyncOperation = Application.LoadLevelAdditiveAsync(sceneName); #else AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); #endif onLoading.Invoke(sceneName, asyncOperation); yield return(asyncOperation); FinishLoad(sceneName, loadedHandler, distance); }
/// <summary> /// (Unity) Runs Application.LoadLevelAdditive() and calls FinishLoad() when done. /// This coroutine waits two frames to wait for the load to complete. /// </summary> /// <returns>The additive.</returns> /// <param name="sceneName">Scene name.</param> /// <param name="loadedHandler">Loaded handler.</param> /// <param name="distance">Distance.</param> private IEnumerator LoadAdditive(string sceneName, InternalLoadedHandler loadedHandler, int distance) { #if UNITY_4_6 || UNITY_4_7 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 Application.LoadLevelAdditive(sceneName); #else SceneManager.LoadScene(sceneName, LoadSceneMode.Additive); #endif onLoading.Invoke(sceneName, null); yield return(new WaitForEndOfFrame()); yield return(new WaitForEndOfFrame()); FinishLoad(sceneName, loadedHandler, distance); }
/// <summary> /// <para>Se llama cuando se hace un nivel de carga.</para> /// </summary> /// <param name="sceneName">Nombre escena.</param> /// <param name="loadedHandler">Delegado.</param> /// <param name="distance">Distancia.</param> private void FinishLoad(string sceneName, InternalLoadedHandler loadedHandler, int distance) // Se llama cuando se hace un nivel de carga { GameObject scene = GameObject.Find(sceneName); if (scene == null && Debug.isDebugBuild) { Debug.LogWarning("Scene Streamer: No se puede encontrar la escena cargada llamada '" + sceneName + "'."); } m_loading.Remove(sceneName); m_loaded.Add(sceneName); onLoaded.Invoke(sceneName); if (loadedHandler != null) { loadedHandler(sceneName, distance); } }
/// Called when a level is done loading. Updates the loaded and loading lists, and /// calls the loaded handler. private void FinishLoad(string sceneName, InternalLoadedHandler loadedHandler, int distance) { GameObject scene = GameObject.Find(sceneName); if (scene == null && Debug.isDebugBuild) { Debug.LogWarning("Scene Streamer: Can't find loaded scene named '" + sceneName + "'."); } loading.Remove(sceneName); loaded.Add(sceneName); onLoaded.Invoke(sceneName); if (loadedHandler != null) { loadedHandler(sceneName, distance); } }
/// Loads a scene and calls an internal delegate when done. The delegate is /// used by the LoadNeighbors() method. private void Load(string sceneName, InternalLoadedHandler loadedHandler, int distance) { if (IsLoaded(sceneName)) { if (loadedHandler != null) { loadedHandler(sceneName, distance); } return; } loading.Add(sceneName); if (logDebugInfo && distance > 0) { Debug.Log("Scene Streamer: Loading " + sceneName + "."); } LoadAdditiveAsyncCoroutine(sceneName, loadedHandler, distance); }
/// <summary> /// <para>Carga una escena y llama a un delegado interno cuando se hace.</para> /// </summary> /// <param name="sceneName">Nombre escena.</param> /// <param name="loadedHandler">Delegado.</param> /// <param name="distance">Distancia.</param> private void Load(string sceneName, InternalLoadedHandler loadedHandler, int distance) // Carga una escena y llama a un delegado interno cuando se hace { if (IsLoaded(sceneName)) { if (loadedHandler != null) { loadedHandler(sceneName, distance); } return; } m_loading.Add(sceneName); if (logDebugInfo && distance > 0) { Debug.Log("Scene Streamer: Cargando " + sceneName + "."); } StartCoroutine(LoadAdditiveAsync(sceneName, loadedHandler, distance)); }
/// <summary> /// Called when a level is done loading. Updates the loaded and loading lists, and /// calls the loaded handler. /// </summary> /// <param name="sceneName">Scene name.</param> /// <param name="loadedHandler">Loaded handler.</param> /// <param name="distance">Distance.</param> private void FinishLoad(string sceneName, InternalLoadedHandler loadedHandler, int distance) { GameObject scene = GameObject.Find(sceneName); if (scene == null && Debug.isDebugBuild) { Debug.LogWarning("Scene Streamer: Can't find loaded scene named '" + sceneName + "'."); } #if !UNITY_5_3_OR_NEWER if (scene) { scene.transform.parent = sceneContainer.transform; } #endif m_loading.Remove(sceneName); m_loaded.Add(sceneName); onLoaded.Invoke(sceneName); if (loadedHandler != null) { loadedHandler(sceneName, distance); } }
private void LoadAdditiveAsyncCoroutine(string sceneName, InternalLoadedHandler loadedHandler, int distance) { Main.Instance.StartCoroutine(LoadAdditiveAsync(sceneName, loadedHandler, distance)); }