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

Unity MVC丨(四)View:创建UI窗体的存放物体、UIRoot管理类

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

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

本系列博客地址:传送门

一、本节概述

上节我们完成了View视图层基类 BaseWindow 的创建,那么视图层管理的UI生成在面板的哪个位置呢?哪个类控制UI的位置呢?因此,就有了本节内容:

  • 创建“UI窗体的存放物体”,这个物体名为UIRoot,用以存放我们生成的UI
  • “窗体管理类UIRoot”,这个类,用以自动生成UIRoot、将我们的UI设置到UIRoot中对应的位置去。

二、创建UI窗体的存放物体

1、创建如下预制体

创建预制体,并放在Resources/UI下。该UI意义如下:

  • UIRoot:是一个Canvas。
  • recyclePool:存放已经关闭的窗体
  • workstation:存放正在显示的窗体
  • noticestation:存放打开的、提示类型的窗体

2、修改预制体锚点

将recyclePool、workstation、workstation三个物体的锚点,从居中改为将锚点定在四角。

记得Apply一下。

三、UIRoot管理类

Assets/MVCLibrary下,创建UIRoot脚本,该脚本完成了:

  • 若不存在存放UI窗体的UIRoot物体,就自动从Resources创建它
  • 拥有公开接口,用以设置UI窗体的父物体(位于UIRoot哪个物体下)

内容如下:

代码语言:javascript
复制
using UnityEngine;

public class UIRoot
{
    private static Transform transform;

    /// <summary>
    /// 回收的窗体(隐藏)
    /// </summary>
    private static Transform recyclePool;

    /// <summary>
    /// 前台显示的工作的窗体
    /// </summary>
    private static Transform workstation;

    /// <summary>
    /// 提示类型的窗体
    /// </summary>
    private static Transform noticestation;

    private static bool isInit = false;

    public static void Init()
    {
        if (transform == null)
        {
            var obj = Resources.Load<GameObject>("UI/UIRoot");
            transform = GameObject.Instantiate(obj).transform;
        }

        if (recyclePool == null)
        {
            recyclePool = transform.Find("recyclePool");
        }

        if (workstation == null)
        {
            recyclePool = transform.Find("workstation");
        }

        if (noticestation == null)
        {
            recyclePool = transform.Find("noticestation");
        }

        isInit = true;
    }

    public static void SetParent(Transform window, bool isOpen, bool isTipsWindow = false)
    {
        if (isInit == false)
            Init();

        if (isOpen)
        {
            if (isTipsWindow)
            {
                window.SetParent(noticestation, false);
            }
            else
            {
                window.SetParent(workstation, false);
            }
        }
        else
        {
            window.SetParent(recyclePool, false);
        }
    }
}

好了,下章见

一起进步

我是SKODE

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、本节概述
  • 二、创建UI窗体的存放物体
  • 三、UIRoot管理类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档