public static void LoadSceneAsync(string p_name, LoadSceneMode p_sceneMode, bool p_holdSceneActivation, bool p_setAsActiveScene, ReceiveArgsMethodType p_methodType, object[] p_argsToSend = null, GameObject[] p_gameObjectsToSend = null, Action <float> p_callbackProgress = null, Action p_finishCallback = null) { if (p_setAsActiveScene) { GameCore.instance.StartCoroutine(SetSceneAsMainCorroutine(p_name)); } if (p_methodType != ReceiveArgsMethodType.NONE) { SceneDataParams __params = new SceneDataParams(); __params.sceneName = p_name; __params.receiveMethodType = p_methodType; __params.argsToSend = p_argsToSend; __params.gameObjectsToSend = p_gameObjectsToSend; SceneCore.instance.AddSceneParams(__params); } AsyncOperation __operation = null; switch (p_sceneMode) { case LoadSceneMode.ADDITIVE: __operation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(p_name, UnityEngine.SceneManagement.LoadSceneMode.Additive); __operation.allowSceneActivation = !p_holdSceneActivation; GameCore.instance.StartCoroutine(HandlerLoadAsyncCorroutine(__operation, p_name, p_holdSceneActivation, p_sceneMode, p_callbackProgress, p_finishCallback)); if (p_gameObjectsToSend != null) { for (int i = 0; i < p_gameObjectsToSend.Length; i++) { p_gameObjectsToSend [i].transform.SetParent(null); UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(p_gameObjectsToSend [i], UnityEngine.SceneManagement.SceneManager.GetSceneByName(p_name)); } } break; case LoadSceneMode.SINGLE: __operation = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(p_name, UnityEngine.SceneManagement.LoadSceneMode.Additive); __operation.allowSceneActivation = !p_holdSceneActivation; if (UnityEngine.SceneManagement.SceneManager.GetSceneByName(p_name).isLoaded) { if (SceneCore.instance.GetSceneByName(p_name) != null) { SceneCore.instance.GetSceneByName(p_name).OnUnloadedScene(); SceneCore.instance.RemoveScene(p_name); } UnityEngine.SceneManagement.SceneManager.UnloadSceneAsync(p_name); } GameCore.instance.StartCoroutine(HandlerLoadAsyncCorroutine(__operation, p_name, p_holdSceneActivation, p_sceneMode, p_callbackProgress, p_finishCallback)); if (p_gameObjectsToSend != null) { for (int i = 0; i < p_gameObjectsToSend.Length; i++) { p_gameObjectsToSend [i].transform.SetParent(null); UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(p_gameObjectsToSend [i], UnityEngine.SceneManagement.SceneManager.GetSceneByName(p_name)); } } break; default: break; } }
public static void LoadScene(string p_sceneName, LoadSceneMode p_sceneMode, bool p_setAsActiveScene, ReceiveArgsMethodType p_methodType, object[] p_argsToSend = null, GameObject[] p_gameObjectsToSend = null, Action p_sceneFinishedLoadCallback = null) { if (p_setAsActiveScene) { GameCore.instance.StartCoroutine(SetSceneAsMainCorroutine(p_sceneName)); } GameCore.instance.StartCoroutine(CheckSceneLoadedCorroutine(p_sceneName, p_sceneFinishedLoadCallback)); if (p_methodType != ReceiveArgsMethodType.NONE) { SceneDataParams __params = new SceneDataParams(); __params.sceneName = p_sceneName; __params.receiveMethodType = p_methodType; __params.argsToSend = p_argsToSend; __params.gameObjectsToSend = p_gameObjectsToSend; SceneCore.instance.AddSceneParams(__params); } switch (p_sceneMode) { case LoadSceneMode.ADDITIVE: UnityEngine.SceneManagement.SceneManager.LoadScene(p_sceneName, UnityEngine.SceneManagement.LoadSceneMode.Additive); if (p_gameObjectsToSend != null) { for (int i = 0; i < p_gameObjectsToSend.Length; i++) { p_gameObjectsToSend [i].transform.SetParent(null); UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(p_gameObjectsToSend [i], UnityEngine.SceneManagement.SceneManager.GetSceneByName(p_sceneName)); } } break; case LoadSceneMode.SINGLE: if (UnityEngine.SceneManagement.SceneManager.GetSceneByName(p_sceneName).isLoaded) { if (SceneCore.instance.GetSceneByName(p_sceneName) != null) { SceneCore.instance.GetSceneByName(p_sceneName).OnUnloadedScene(); SceneCore.instance.RemoveScene(p_sceneName); } UnityEngine.SceneManagement.SceneManager.UnloadSceneAsync(p_sceneName); } UnityEngine.SceneManagement.SceneManager.LoadScene(p_sceneName, UnityEngine.SceneManagement.LoadSceneMode.Additive); if (p_gameObjectsToSend != null) { for (int i = 0; i < p_gameObjectsToSend.Length; i++) { p_gameObjectsToSend [i].transform.SetParent(null); UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(p_gameObjectsToSend [i], UnityEngine.SceneManagement.SceneManager.GetSceneByName(p_sceneName)); } } for (int i = UnityEngine.SceneManagement.SceneManager.sceneCount - 1; i >= 0; i--) { if (UnityEngine.SceneManagement.SceneManager.GetSceneAt(i).name != "VoxFrameworkScene" && UnityEngine.SceneManagement.SceneManager.GetSceneAt(i).name != p_sceneName) { UnityEngine.SceneManagement.Scene __scene = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i); if (__scene.isLoaded) { if (SceneCore.instance.GetSceneByName(__scene.name) != null) { SceneCore.instance.GetSceneByName(__scene.name).OnUnloadedScene(); SceneCore.instance.RemoveScene(__scene.name); } UnityEngine.SceneManagement.SceneManager.UnloadSceneAsync(__scene.name); } } } break; default: break; } }