private string GetSubPanelTypes(UIPanelType type) { if (m_subpanels.ContainsKey(type)) { return(type.ToString() + ": subpanel is " + m_subpanels[type]); } return(type.ToString() + ": no subpanels"); }
private BasePanel GetPanel(UIPanelType panelType) { GameObject instPanel; if ((instPanel = m_PanelCache.MyTryGetValue(panelType)) == null) { string path = null; foreach (var item in json.PanelList) { if (item.PanelName == panelType.ToString()) { path = item.PanelPath; break; } } if (path != null) { instPanel = AssetManager.GetPanelObject(path); if (instPanel == null) { return(null); } instPanel.transform.SetParent(m_CanvasTransform, false); instPanel.AddComponent <CanvasGroup>(); m_PanelCache.Add(panelType, instPanel); } } return(instPanel.GetComponent <BasePanel>()); }
/// <summary> /// 根据面板类型 得到实例化的面板 /// </summary> /// <returns></returns> private BasePanel GetPanel(UIPanelType panelType) { if (m_PanelDict == null) { m_PanelDict = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = null; if (!m_PanelDict.TryGetValue(panelType, out panel) || panel == null) { //如果找不到,那么就找这个面板的prefab的路径,然后去根据prefab去实例化面板 string path = ConstConfig.UIPREFABPATH + panelType.ToString() + ".prefab"; //GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; GameObject instPanel = ObjectManager.Instance.InstantiateObject(path, isClear: false); if (instPanel != null) { instPanel.transform.SetParent(m_PanelRoot, false); instPanel.GetComponent <BasePanel>().uiManager = this; //instPanel.GetComponent<BasePanel>().gameFacade = gameFacade; m_PanelDict.Add(panelType, instPanel.GetComponent <BasePanel>()); return(instPanel.GetComponent <BasePanel>()); } else { Debug.LogError("未找到panel,路径:" + path); return(null); } } else { return(panel); } }
/// <summary> /// 创建一个面板并且显示 /// </summary> /// <param name="panelType"></param> /// <returns></returns> private BasePanel GetPanel(UIPanelType panelType) { //写字典缓存,类似于对象池 GameObject instPanel = panelCache.TryGetValueByNN(panelType); //判断缓存里面有没有,如果没有,创建新的,如果有拿缓存里的 if (instPanel == null) { //通过名字找路径 string path = ""; foreach (var item in json.PanelList) { Debug.Log("开始查找" + item.PanelName + ":" + item.PanelPath); if (item.PanelName == panelType.ToString()) { path = item.PanelPath; Debug.Log("找到啦" + item.PanelName); } } Debug.Log("新创建创建啦:" + path); instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; instPanel.transform.SetParent(CanvasTransform, false); panelCache.Add(panelType, instPanel); } else { Debug.Log("用的缓存"); } return(instPanel.GetComponent <BasePanel>()); }
public void OpenPanel(UIPanelType panelType, System.Object openParam = null) { PanelData data = null; if (!_panelDict.TryGetValue(panelType, out data)) { throw new Exception("UIManager::OpenPanel:can not find paneltype=" + panelType.ToString()); } if (!data.IsReady) { List <CachedParamBase> cachedParamsList = null; if (!_paramCacheDict.TryGetValue(data.resName, out cachedParamsList)) { cachedParamsList = new List <CachedParamBase>(); } cachedParamsList.Add(new OpenParam(data.resName, panelType, openParam)); _paramCacheDict[data.resName] = cachedParamsList; if (!data.isLoadingResource) { //只加载一次 data.isLoadingResource = true; _resManager.GetResource(this, data.resName, OnUIResourceLoaded); } return; } if (data.instance == null) { data.instance = CreateUI(data); } data.instance.Open(openParam); }
//根据面板类型UIPanelType得到实例化的面板 private BasePanel GetPanel(UIPanelType panelType) { if (panelDict == null)//如果panelDict字典为空,就实例化一个空字典 { panelDict = new Dictionary <UIPanelType, BasePanel>(); } //BasePanel panel; //panelDict.TryGetValue(panelType, out panel);//不为空就根据类型得到Basepanel BasePanel panel = panelDict.TayGet(panelType); //我们扩展的Dictionary的方法,代码作用同上两行 if (panel == null) //如果得到的panel为空,那就去panelPathDict字典里面根据路径path找到,然后加载,接着实例化 { string path = panelPathDict.TayGet(panelType); //我们扩展的Dictionary的方法 //panelPathDict.TryGetValue(panelType, out path); GameObject instPanel = GameObject.Instantiate(Resources.Load(path)) as GameObject; //根据路径加载并实例化面板 instPanel.transform.SetParent(this.CanvasTransform, false); //设置为Canvas的子物体,false表示实例化的子物体坐标以Canvas为准 instPanel.transform.name = panelType.ToString() + "Panel"; panelDict.Add(panelType, instPanel.GetComponent <BasePanel>()); return(instPanel.GetComponent <BasePanel>()); } else { return(panel); } }
private string GetPathByAttribute(UIPanelType panelType) { var atrs = panelType.GetType().GetMember(panelType.ToString()); var attributes = atrs[0].GetCustomAttributes(typeof(AssetPathAttribute), false); var atribute = (AssetPathAttribute)attributes[0]; return(atribute.Path); }
public void ShowPanel(UIPanelType type) { Debug.Log($"Showing Panel: {type.ToString()}"); HidePanel(m_currentPanelType); m_currentPanelType = type; var gamePanel = m_uiPanels.First(panel => panel.Type == type); gamePanel.gameObject.SetActive(true); gamePanel.ShowPanel(); }
public override void Run() { gameObject.name = "UI Root"; Trans = gameObject.transform; UICanvas = Trans.Find("Camera/Canvas").GetComponent <Canvas>(); UICamera = Trans.Find("Camera").GetComponent <Camera>(); CanvasRoot = UICanvas.gameObject; // DestroyChildren(CanvasRoot.transform); for (UIPanelType i = UIPanelType.One; i <= UIPanelType.Other; i++) { GameObject go = new GameObject(i.ToString()); go.transform.SetParent(CanvasRoot.transform, false); RectTransform rect = go.AddComponent <RectTransform>(); SetRectTransform(rect); _roots.Add(i, go); } }
private BasePanel GetPanel(UIPanelType panelType) { if (panelDict == null) { panelDict = new Dictionary <UIPanelType, BasePanel>(); } BasePanel panel = panelDict.GetValue(panelType); //如果没有实例化面板,寻找路径进行实例化,并且存储到已经实例化好的字典面板中 if (panel == null) { string path = panelPathDict.GetValue(panelType.ToString()); GameObject panelGo = GameObject.Instantiate(Resources.Load <GameObject>(path), CanvasTransform, false); panel = panelGo.GetComponent <BasePanel>(); panelDict.Add(panelType, panel); } return(panel); }
public static BasePanel GetPanel(UIPanelType type) { if (panels == null) { return(null); } BasePanel panel; if (!panels.TryGetValue(type, out panel)) { Transform temp = ResourcesManager.instance.LoadAndInstantiate <Transform>(panelPaths[type]); temp.name = type.ToString(); temp.parent = UIManager.instance.uiRootTrnasform; temp.localPosition = Vector3.zero; temp.localScale = Vector3.zero; panel = temp.GetComponent <BasePanel>(); panel.UIPanelType = type; RegisterPanel(type, panel); } return(panel); }
public void DestroyPanel(UIPanelType panelType) { PanelData data = null; if (!_panelDict.TryGetValue(panelType, out data)) { throw new Exception("UIManager::DestroyPanel:can not find paneltype=" + panelType.ToString()); } if (data.instance != null) { data.instance.Close(); GameObject.Destroy(data.instance.gameObject); data.instance = null; } if (data.panelResObject != null) { //这里不进行destroy prefab,由资源管理器负责,此处仅仅取消索引即可 //GameObject.Destroy(data.panelResObject.gameObject); data.panelResObject = null; } _resManager.ReturnResource(this, data.resName); }
public void ClosePanel(UIPanelType panelType, System.Object closeParam = null) { PanelData data = null; if (!_panelDict.TryGetValue(panelType, out data)) { throw new Exception("UIManager::ClosePanel:can not find paneltype=" + panelType.ToString()); } if (!data.IsReady) { //如果资源不在加载中,就没有缓存close的意义 if (data.isLoadingResource) { List <CachedParamBase> cachedParamsList = null; if (!_paramCacheDict.TryGetValue(data.resName, out cachedParamsList)) { cachedParamsList = new List <CachedParamBase>(); } cachedParamsList.Add(new CloseParam(data.resName, panelType, closeParam)); _paramCacheDict[data.resName] = cachedParamsList; } return; } if (data.instance == null) { return; } data.instance.Close(closeParam); }
public GameObject OpenWindowUI(UIPanelType windowType, //以下2个参数不应该被随便修改,把他们移到Leo_UIWindowBase中统一配置 /* Leo_AnchorPosition pos = Leo_AnchorPosition.CENTER, * Leo_ShowWindowStyle style = Leo_ShowWindowStyle.NONE,*/bool isUGUI = true, bool isOpenWindow = true) { GameObject obj = null; //判断场景是否已经打开了一个相同场景 if (mWindowDic.ContainsKey(windowType)) { Debug.Log("已经有一个" + windowType + "在场景中!"); //temp, Leo solution,UGUI后此方案已过时,新方案为统一设置obj后再统一进行层级管理 //return mWindowDic[windowType].gameObject; obj = mWindowDic[windowType].gameObject; } else { //判断当前设置是否是不打开其他窗口 if (windowType.Equals(UIPanelType.NONE)) { Debug.Log("已设置为不打开窗口!"); return(null); } #region UGUI后自行修改 if (isUGUI) { //生成一个预制体的精简写法,需保证格式化内容与预制体名一致 obj = ResourcesManager.Instance. Load(ResourcesManager.ResourceType.UIPanel, string.Format("Panel_{0}UGUI", windowType.ToString().ToLower()), true); } else { //生成一个预制体的精简写法,需保证格式化内容与预制体名一致 obj = ResourcesManager.Instance. Load(ResourcesManager.ResourceType.UI_WINDOW, string.Format("Panel_{0}", windowType.ToString().ToLower()), true); } #endregion #region 使用上述写法后,switch弃用。但需注意Panel_后的内容必须为小写,创建预制体需注意。 /* * switch (windowType) * { * case Leo_WindowUIType.LOGIN: * obj = Leo_ResourcesManager.Instance. * Load(Leo_ResourcesManager.ResourceType.UI_WINDOW, "Panel_Login", true); * break; * case Leo_WindowUIType.REG: * obj = Leo_ResourcesManager.Instance. * Load(Leo_ResourcesManager.ResourceType.UI_WINDOW, "Panel_Reg", true); * break; * } * */ #endregion //把当前类的对象存入字典,方便操作 //Leo_UIWindowBase windowBase = obj.GetComponent<Leo_UIWindowBase>(); UIPanelViewBase panelBase = obj.GetComponent <UIPanelViewBase>(); if (panelBase == null || obj == null) { return(null); } //层级管理,后打开的窗口显示在最前方,UGUI后改叫SetOrderInLayer(obj); //Leo_UIDepthManager.Instance.SetDepth(obj); mWindowDic.Add(windowType, panelBase); //设置父类属性,要打开哪个窗口传进去 panelBase.currentUIType = windowType; Transform transParent = null; //选择锚点位置 switch (panelBase.pos) { case AnchorPosition.CENTER: //transParent = Leo_UISceneManager.Instance.currentScene.containerCenter; transParent = UIRootController.Instance.currentScene.containerCenter; break; case AnchorPosition.TOP_LEFT: break; case AnchorPosition.TOP_RIGHT: break; case AnchorPosition.BOTTOM_LEFT: break; case AnchorPosition.BOTTOM_RIGHT: break; } //设置窗口transform参数 obj.transform.parent = transParent; obj.transform.localPosition = Vector3.zero; obj.transform.localScale = Vector3.one; //生成完先关闭,在下面实现窗口动画时根据需求再开启 //NGUITools.SetActive(obj, false); obj.SetActive(false); //ShowWindow(obj, windowBase.style, isOpenWindow); //优化后的showWindow,传一个父类对象即可操作,很多属性都在父类中写好了 ShowWindow(panelBase, isOpenWindow); } //UGUI层级管理方法,同时优化NGUI时自己的旧写法 Leo_UIDepthManager.Instance.SetOrderInLayer(obj); return(obj); }
public override void OnExit() { base.OnExit(); Debug.Log("退出:" + UIPanelType.ToString()); }
public override void OnEnter() { base.OnEnter(); Debug.Log("进入:" + UIPanelType.ToString()); }