public void ShowImmediately(ePopupMode mode, params object[] objs) { PopupBase obj = Load(mode); if (obj != null) { StackPopup(new PopupInfo(mode, obj, objs)); Show(true, true); } }
public void Show(ePopupMode mode, params object[] objs) //重载了上面的show { if (Application.isPlaying == false) { return; } //在这里只做了 停止当前的弹出框动画以及 讲现在的弹出框入栈的操作上面的show才是真正的show操作 PopupBase obj = Load(mode); if (obj != null) { if (gameObject.activeInHierarchy == true && m_TWHide.IsPlaying()) { m_TWHide.Stop(); } StackPopup(new PopupInfo(mode, obj, objs)); Show(true, obj.bShowImmediately); } }
PopupBase Load(ePopupMode mode) //加载弹出框 { PopupBase result = null; //Debug.LogFormat("Load {0}", mode); if (mPopupCache.TryGetValue(mode, out result) == true) //如果字典中已经有了就直接返回 { return(result); } string classname = string.Format("Popup{0}", mode.ToString()); //根据不同的mode获取不停的预设体来创建弹出框 string path = string.Format("Prefab/Popup/{0}", classname); //生成路径 //Debug.LogFormat("{0}", path); Object loadPrefab = Resources.Load(path, typeof(GameObject)); //加载预设体 if (loadPrefab != null) { //设置预设体的信息 GameObject obj = (Instantiate(loadPrefab) as GameObject); //实例化一个弹出框 并把它转换为GameObj类型 obj.transform.parent = contents.transform; obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; obj.SetActive(false); var popup_base = obj.GetComponent <PopupBase>(); //为啥能得到这个控件 if (mPopupCache.ContainsKey(mode) == false) //如果没有这个类型的弹出框 { mPopupCache.Add(mode, popup_base); //讲预设体和对应的mode名称存入字典当中 } return(popup_base); } else { Debug.LogError("Resources.Load() failed. " + path); } return(result); }
public void StackPopup(ePopupMode mode, params object[] objs) //入栈 { PopupInfo menu = new PopupInfo(mode, null, objs); mPopupStack.Insert(0, menu); }
public PopupInfo(ePopupMode _mode, PopupBase _obj, params object[] _parms) //构造函数 { mode = _mode; obj = _obj; parms = _parms; }