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 LoadSceneAsyncIndex(IntPtr L) { try { ToLua.CheckArgsCount(L, 3); SceneMgr obj = (SceneMgr)ToLua.CheckObject <SceneMgr>(L, 1); int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); OnSceneIndexChanged arg1 = (OnSceneIndexChanged)ToLua.CheckDelegate <OnSceneIndexChanged>(L, 3); obj.LoadSceneAsyncIndex(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
/// <summary> /// 以异步-单独的方式加载场景(携程调用) /// </summary> /// <param name="sceneIndex"></param> /// <param name="onSceneChanged"></param> /// <returns></returns> private IEnumerator LoadTargetSceneAsync(int sceneIndex, OnSceneIndexChanged onSceneChanged) { if (SceneManager.GetActiveScene().buildIndex == sceneIndex) { Debug.LogWarning(string.Format("索引为{0}的场景已经加载过了!", sceneIndex)); } AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneIndex, LoadSceneMode.Single); while (!asyncOperation.isDone) { yield return(asyncOperation); } Scene scene = SceneManager.GetSceneAt(sceneIndex); SceneManager.SetActiveScene(scene); yield return(null); currentScene = SceneManager.GetActiveScene(); if (null != onSceneChanged) { onSceneChanged(sceneIndex); } }
/// <summary> /// 以异步-单独的方式加载场景 /// </summary> /// <param name="sceneIndex"></param> /// <param name="onSceneChanged"></param> public void LoadSceneAsync(int sceneIndex, OnSceneIndexChanged onSceneChanged) { StartCoroutine(LoadTargetSceneAsync(sceneIndex, onSceneChanged)); }