/// <summary> /// 关闭UI /// </summary> /// <param name="_lancherUIType"></param> public void Close(CodeBridgeTool.EnumPreWindow _lancherUIType) { GameObject window; if (opendWindow.TryGetValue(_lancherUIType, out window)) { //TODO 打开和关闭可能太消耗性能 这里是未来的性能优化点 window.SetActive(false); } else { Debug.LogWarning("尝试关闭一个从未打开的面板!" + _lancherUIType); } }
/// <summary> /// 按照配置打开界面 /// 并且按照配置设置层级 /// </summary> public GameObject Open(CodeBridgeTool.EnumPreWindow _lancherUIType) { GameObject window; if (!opendWindow.TryGetValue(_lancherUIType, out window)) { window = LoadWindow(_lancherUIType); var layer = LancherLayer.Top; if (this.lancherUILayerDic.TryGetValue(_lancherUIType, out layer)) { var uiTransform = window.transform as RectTransform; switch (layer) { case LancherLayer.Bottom: uiTransform.SetParent(CanvasBottomTransform); break; case LancherLayer.Top: uiTransform.SetParent(CanvasTopTransform); uiTransform.SetAsLastSibling(); break; default: break; } uiTransform.sizeDelta = Vector2.zero; uiTransform.localPosition = Vector3.zero; uiTransform.localScale = Vector3.one; opendWindow.Add(_lancherUIType, window); } else { throw new Exception("需要配置lancherUI的层级"); } } //TODO 打开和关闭可能太消耗性能 这里是未来的性能优化点 window.SetActive(true); return(window); }
/// <summary> /// 通过Resource加载Lancher中的UI /// </summary> /// <param name="_lancherUIType"></param> /// <returns></returns> private GameObject LoadWindow(CodeBridgeTool.EnumPreWindow _lancherUIType) { string loadPath; if (lancherUIPathDic.TryGetValue(_lancherUIType, out loadPath)) { if (string.IsNullOrEmpty(loadPath)) { throw new Exception("加载路径获取到的为空" + _lancherUIType); } var prefab = Resources.Load(loadPath) as GameObject; if (prefab != null) { var result = Object.Instantiate(prefab); if (result) { return(result); } else { throw new Exception("神奇的问题,加载成功但是竟然未能初始化成功!" + loadPath); } } else { throw new Exception("在Resource中未能成功加载" + loadPath); } } else { throw new Exception("在Lancher中加载未发现合适的路径配置!" + _lancherUIType); } }