大家好,我是SKODE。 小提示:选中左侧目录,可快速找到所需内容
本系列博客地址:传送门
一、本节目标
窗体管理类WindowManager是用来做什么的?
- 这是真正的给我们使用的窗体管理类,我们想打开一个窗体,就调用它好了。比如:
WindowManager.Instance.OpenWindow(WindowType.StoreWindow);
- 我们之前写了很多接口,但哪些窗体要用到这些接口脚本呢?所以这脚本还用于初始化我们要用到的窗体,即我们要将用到的窗体在这添加进去。
二、窗体管理类:WindowManager
在Assets/MVCLibrary下创建该脚本。内容如下:
代码语言:javascript复制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