当前位置: 代码迷 >> 综合 >> Unity MVC丨(六)创建窗体管理类:WindowManager
  详细解决方案

Unity MVC丨(六)创建窗体管理类:WindowManager

热度:13   发布时间:2024-01-31 04:46:41.0

大家好,我是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<WindowManager>
{Dictionary<WindowType, BaseWindow> windowDic = new Dictionary<WindowType, BaseWindow>();/// <summary>/// 构造函数,完成窗体初始化/// </summary>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);}}}/// <summary>/// 打开窗口/// </summary>/// <param name="type"></param>/// <returns></returns>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;}}/// <summary>/// 关闭窗口/// </summary>/// <param name="type"></param>/// <returns></returns>public void CloseWindow(WindowType type){BaseWindow window;if (windowDic.TryGetValue(type, out window)){window.Close();}else{Debug.LogError($"Close Error:{type}");}}/// <summary>/// 预加载窗体(若当前场景跟该UI设置的场景类型相同,就可预加载该UI)/// </summary>/// <param name="type"></param>public void PreLoadWindow(SceneType type){foreach (var item in windowDic.Values){if (item.GetSceneType() == type){item.PreLoad();}}}/// <summary>/// 隐藏掉某个类型的所有窗口/// </summary>/// <param name="type">要被卸载(只是close了)的类型</param>/// <param name="isDestroy">是否强制卸载(销毁了)</param>public void HideAllWindow(SceneType type, bool isDestroy = false){foreach (var item in windowDic.Values){if (item.GetSceneType() == type){item.Close(isDestroy);}}}
}

 

 

一起进步

我是SKODE

  相关解决方案