public static Type GetUiScriptType(E_UIID uiid) { Type scriptType = null; switch (uiid) { case E_UIID.MainUi: scriptType = typeof(MainUi); break; case E_UIID.RangeUi: scriptType = typeof(RangeUi); break; case E_UIID.SettingUi: scriptType = typeof(SettingUi); break; case E_UIID.PlayUi: scriptType = typeof(PlayUi); break; default: break; } return(scriptType); }
public void HideSingleUI(E_UIID uiID)//供外界调用的隐藏窗体方法 { if (dicShowUi.ContainsKey(uiID)) { dicShowUi[uiID].HideUI(); dicShowUi.Remove(uiID); } }
private BaseUi GetGaseUI(E_UIID uiid)//判断将要显示的窗体是否已经加载过 { if (dicAllUi.ContainsKey(uiid)) { return(dicAllUi[uiid]);//之前有加载过,返回uiid的字典 } else { return(null);//之前没有加载过,需要加载 } }
private BaseUi JudgeShowUI(E_UIID uiid) //判断要显示的是哪个UI,返回现在显示的UI { //判断要显示的窗体是否正在显示,如果正在显示则不用处理 if (dicShowUi.ContainsKey(uiid)) { return(null); } BaseUi baseUi = GetGaseUI(uiid); if (baseUi == null)//判断需要显示的窗体是否加载过 { //拿到UIID然后向UI路径字典取值 string path = GameDefine.dicPath[uiid]; GameObject loadUi = Resources.Load <GameObject>(path); if (loadUi != null) { //路径正确,实例化窗体 GameObject willShowUI = Instantiate(loadUi); baseUi = willShowUI.GetComponent <BaseUi>(); Type type = GameDefine.GetUiScriptType(uiid); if (baseUi == null) { //说明窗体是没有挂载脚本,自动添加对应的UI脚本 baseUi = willShowUI.AddComponent(type) as BaseUi; } else { baseUi = willShowUI.GetComponent(type) as BaseUi; } Transform uiRoot = GetTheRoot(baseUi); GameTool.AddChildToParent(uiRoot, willShowUI.transform); //位置不正确,重设UI位置 willShowUI.GetComponent <RectTransform>().sizeDelta = Vector2.zero; willShowUI.GetComponent <RectTransform>().anchoredPosition3D = Vector3.zero; //窗体第一次加载,把该窗体缓存到aicAllUi字典。 dicAllUi.Add(uiid, baseUi); } else { Debug.Log("没有加载到" + uiid + "预制体"); } } else { baseUi.ShowUI(); } UpdateShowUiHedeUi(baseUi); return(baseUi); }
public void ShowUI(E_UIID uiid, bool isSaveBeforeID = true)//显示窗体 { if (uiid == E_UIID.NullUi) { //Debug.Log("窗体ID为NullUi"); //return; uiid = E_UIID.MainUi; } BaseUi baseUi = JudgeShowUI(uiid); if (isSaveBeforeID) { baseUi.BeforeUiid = beforeUIID; } }
public void HideAllUI(bool isHideKeepAboveUi, BaseUi baseUi) { if (isHideKeepAboveUi)//隐藏所有窗体 { foreach (BaseUi item in dicShowUi.Values) { item.HideUI(); } dicShowUi.Clear(); } else//隐藏除前方窗体外的窗体 { List <E_UIID> listRemove = new List <E_UIID>(); foreach (BaseUi item in dicShowUi.Values) { if (item.uiType.UiRootType == E_UiRootType.KeepAbove) { continue; } else { item.HideUI(); listRemove.Add(item.Uiid); } } for (int i = 0; i < listRemove.Count; i++) { dicShowUi.Remove(listRemove[i]); if (i == listRemove.Count - 1) { //记录上一个窗体的功能 beforeUIID = listRemove[i]; } } } }