大家好,我是SKODE。
小提示:选中左侧目录,可快速找到所需内容
本系列博客地址:传送门
一、本节目标
窗体管理类WindowManager是用来做什么的?
- 这是真正的给我们使用的窗体管理类,我们想打开一个窗体,就调用它好了。比如:
WindowManager.Instance.OpenWindow(WindowType.StoreWindow);
- 我们之前写了很多接口,但哪些窗体要用到这些接口脚本呢?所以这脚本还用于初始化我们要用到的窗体,即我们要将用到的窗体在这添加进去。
二、窗体管理类:WindowManager
在Assets/MVCLibrary下创建该脚本。内容如下:
using System; using System.Collections; using System.Collections.Generic; using MVCLibrary.View; using UnityEditor.PackageManager.UI; using UnityEngine; public class WindowManager : MonoSingleton{ Dictionary windowDic = new Dictionary (); /// /// 构造函数,完成窗体初始化 /// public WindowManager() { //我们就在这,添加我们要用到的窗体 //商城 windowDic.Add(WindowType.StoreWindow, new StoreWindow()); } public void Update() { //实现基类BaseWindow的Update不停执行 foreach (var window in windowDic.Values) { if (window.IsVisable()) { window.Update(Time.deltaTime); } } } ////// 打开窗口 /// /// ///public BaseWindow OpenWindow(WindowType type) { BaseWindow window; if (windowDic.TryGetValue(type, out window)) { window.Open(); return window; } else { Debug.LogError($"Open Error:{type}"); return null; } } /// /// 关闭窗口 /// /// ///public void CloseWindow(WindowType type) { BaseWindow window; if (windowDic.TryGetValue(type, out window)) { window.Close(); } else { Debug.LogError($"Close Error:{type}"); } } /// /// 预加载窗体(若当前场景跟该UI设置的场景类型相同,就可预加载该UI) /// /// public void PreLoadWindow(SceneType type) { foreach (var item in windowDic.Values) { if (item.GetSceneType() == type) { item.PreLoad(); } } } ////// 隐藏掉某个类型的所有窗口 /// /// 要被卸载(只是close了)的类型 /// 是否强制卸载(销毁了) public void HideAllWindow(SceneType type, bool isDestroy = false) { foreach (var item in windowDic.Values) { if (item.GetSceneType() == type) { item.Close(isDestroy); } } } }
一起进步
我是SKODE



