static int LoadSceneAsync(IntPtr L) { try { int count = LuaDLL.lua_gettop(L); if (count == 3 && TypeChecker.CheckTypes <string, OnSceneNameChanged>(L, 2)) { SceneMgr obj = (SceneMgr)ToLua.CheckObject <SceneMgr>(L, 1); string arg0 = ToLua.ToString(L, 2); OnSceneNameChanged arg1 = (OnSceneNameChanged)ToLua.ToObject(L, 3); obj.LoadSceneAsync(arg0, arg1); return(0); } else if (count == 3 && TypeChecker.CheckTypes <int, OnSceneIndexChanged>(L, 2)) { SceneMgr obj = (SceneMgr)ToLua.CheckObject <SceneMgr>(L, 1); int arg0 = (int)LuaDLL.lua_tonumber(L, 2); OnSceneIndexChanged arg1 = (OnSceneIndexChanged)ToLua.ToObject(L, 3); obj.LoadSceneAsync(arg0, arg1); return(0); } else { return(LuaDLL.luaL_throw(L, "invalid arguments to method: SceneMgr.LoadSceneAsync")); } } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static int UnloadSceneAsync(IntPtr L) { try { ToLua.CheckArgsCount(L, 3); SceneMgr obj = (SceneMgr)ToLua.CheckObject <SceneMgr>(L, 1); string arg0 = ToLua.CheckString(L, 2); OnSceneNameChanged arg1 = (OnSceneNameChanged)ToLua.CheckDelegate <OnSceneNameChanged>(L, 3); obj.UnloadSceneAsync(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 以异步方式卸载场景(携程调用) /// </summary> /// <param name="sceneName"></param> /// <param name="onSceneChanged"></param> /// <returns></returns> private IEnumerator UnloadTargeSceneAsync(string sceneName, OnSceneNameChanged onSceneChanged) { AsyncOperation asyncOperation = SceneManager.UnloadSceneAsync(sceneName); while (!asyncOperation.isDone) { yield return(asyncOperation); } currentScene = SceneManager.GetActiveScene(); yield return(null); if (null != onSceneChanged) { onSceneChanged(sceneName); } }
/// <summary> /// 以异步-叠加方式加载场景(携程调用) /// </summary> /// <param name="sceneName"></param> /// <param name="onsceneChanged"></param> /// <returns></returns> private IEnumerator LoadTargetSceneAdditiveAsync(string sceneName, OnSceneNameChanged onsceneChanged) { AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); while (!asyncOperation.isDone) { yield return(asyncOperation); } Scene scene = SceneManager.GetSceneByName(sceneName); SceneManager.SetActiveScene(scene); yield return(null); currentScene = SceneManager.GetActiveScene(); if (null != onsceneChanged) { onsceneChanged(sceneName); } }
/// <summary> /// 以异步-单独的方式加载场景(携程调用) /// </summary> /// <param name="sceneName"></param> /// <param name="onSceneChanged"></param> /// <returns></returns> private IEnumerator LoadTargetSceneAsync(string sceneName, OnSceneNameChanged onSceneChanged) { if (SceneManager.GetActiveScene().name == sceneName) { Debug.LogWarning(string.Format("名为{0}的场景已经加载过了!", sceneName)); } AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single); while (!asyncOperation.isDone) { yield return(asyncOperation); } Scene scene = SceneManager.GetSceneByName(sceneName); SceneManager.SetActiveScene(scene); yield return(null); currentScene = SceneManager.GetActiveScene(); if (null != onSceneChanged) { onSceneChanged(sceneName); } }
/// <summary> /// 以异步-叠加方式加载场景 /// </summary> /// <param name="sceneName"></param> /// <param name="onsceneChanged"></param> public void LoadSceneAdditiveAsync(string sceneName, OnSceneNameChanged onsceneChanged) { StartCoroutine(LoadTargetSceneAdditiveAsync(sceneName, onsceneChanged)); }
/// <summary> /// 以异步方式卸载场景 /// </summary> /// <param name="sceneName"></param> /// <param name="onSceneChanged"></param> public void UnloadSceneAsync(string sceneName, OnSceneNameChanged onSceneChanged) { StartCoroutine(UnloadTargeSceneAsync(sceneName, onSceneChanged)); }