前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity MVC丨(六)创建窗体管理类:WindowManager

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

作者头像
星河造梦坊官方
发布2024-08-15 19:01:58
640
发布2024-08-15 19:01:58
举报
文章被收录于专栏:星河造梦坊专栏

大家好,我是SKODE。 小提示:选中左侧目录,可快速找到所需内容

本系列博客地址:传送门

一、本节目标

窗体管理类WindowManager是用来做什么的?

  • 这是真正的给我们使用的窗体管理类,我们想打开一个窗体,就调用它好了。比如:
代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、本节目标
  • 二、窗体管理类:WindowManager
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档