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