/// <summary> /// 异步加载场景 /// </summary> /// <param name="finishCallBack">加载完成后回调</param> /// <param name="sceneName">场景名</param> /// <param name="panelType">加载后第一个加载的panel</param> /// <param name="paramList">panel需要的参数</param> public void LoadSceneAsync(string sceneName, OnAsyncLoadUIFinish finishCallBack, UIPanelType panelType = UIPanelType.None, params object[] paramList) { if (SceneManager.GetActiveScene().name == sceneName) { Debug.LogError("当前出于该场景下:" + sceneName + " 无法重复加载!"); return; } m_Mono.StartCoroutine(StartLoading(sceneName, finishCallBack, panelType, paramList)); }
/// <summary> /// 异步加载面板 /// </summary> /// <param name="panelType">panel类型</param> /// <param name="finishCallBack">panel加载完成后回调</param> /// <param name="paramList">panel加载需要携带的参数</param> public void PushPanelSync(UIPanelType panelType, OnAsyncLoadUIFinish finishCallBack, params object[] paramList) { if (panelType == UIPanelType.None) { return; } AsyncLoadPanelParam param = m_AsyncPanelParamPool.Spawn(); if (param != null) { param.m_PanelType = panelType; param.m_FinishCallBack = finishCallBack; param.paramList = paramList; m_AsyncLoadPanelParamList.Add(param); } }
IEnumerator StartLoading(string sceneName, OnAsyncLoadUIFinish finishCallBack, UIPanelType panelType = UIPanelType.None, params object[] paramList) { BasePanel panel = UIManager.Instance.PushPanel(UIPanelType.AsyncLoadingPanel); int displayProgress = 0; int toProgress = 0; AsyncOperation op = SceneManager.LoadSceneAsync(sceneName); op.allowSceneActivation = false; while (op.progress < 0.9f) { toProgress = (int)op.progress * 100; while (displayProgress < toProgress) { ++displayProgress; SetLoadingPercentage(panel, displayProgress); yield return(new WaitForEndOfFrame()); } } toProgress = 100; while (displayProgress < toProgress) { ++displayProgress; SetLoadingPercentage(panel, displayProgress); yield return(new WaitForEndOfFrame()); } op.allowSceneActivation = true; UIManager.Instance.PopPanel(); BasePanel basePanel = null; if (panelType != UIPanelType.None) { basePanel = UIManager.Instance.PushPanel(panelType, paramList: paramList); } ClearCache(); finishCallBack?.Invoke(basePanel); }
public void Reset() { m_PanelType = UIPanelType.None; m_FinishCallBack = null; paramList = null; }