前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity MVC丨(三)创建View视图层基类:BaseWindow

Unity MVC丨(三)创建View视图层基类:BaseWindow

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

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

本系列博客地址:传送门

一、视图层总览

二、创建基类BaseWindow

在View文件夹下创建基类BaseWindow脚本,该基类完成了对所有UI通用属性、功能的定义,供控制层使用。

定义的属性如下:

  • 该基类会作用在所有窗体(我们某个功能根节点)上,比如登陆窗体、商城窗体等。
  • 该基类定义了所有窗体共有的属性,比如:是否常驻、可见性等。
  • 该基类定义了所有窗体可能用到的共有的组件,比如窗体下所有的按钮,供控制层使用。
  • 该基类定义了所有窗体共有的生命周期,比如每次打开、关闭、初始化。
  • 该基类定义了给子类使用的接口,比如:添加事件、移除事件
代码语言:javascript
复制
using UnityEngine;
using UnityEngine.UI;

namespace MVCLibrary.View
{
    public class BaseWindow
    {
        //定义用到的属性(因为我们现在不继承Mono了,所以需要自己定义)

        #region 基础属性

        /// <summary>
        /// UI物体
        /// </summary>
        protected Transform transform;

        /// <summary>
        /// 资源名称(UI预制体的存放路径)
        /// </summary>
        protected string resName;

        /// <summary>
        /// 是否常驻(若不是常驻,只用一次,那么便关闭后,就将其销毁掉)
        /// </summary>
        protected bool resident;

        /// <summary>
        /// 是否可见
        /// </summary>
        protected bool visable = false;

        /// <summary>
        /// 窗体类型
        /// </summary>
        protected WindowType selfType;

        /// <summary>
        /// 场景类型
        /// </summary>
        protected SceneType sceneType;

        #endregion


        #region UI控件

        /// <summary>
        /// 按钮列表
        /// </summary>
        protected Button[] ButtonLists;

        #endregion


        #region 需要给子类提供的接口

        /// <summary>
        /// 初始化
        /// </summary>
        protected virtual void Awake()
        {
            ButtonLists = transform.GetComponentsInChildren<Button>(true);
            RegisterUiEvent();
        }

        /// <summary>
        /// UI事件的注册
        /// </summary>
        protected virtual void RegisterUiEvent()
        {
        }

        /// <summary>
        /// 添加事件
        /// </summary>
        protected virtual void OnAddListener()
        {
        }

        /// <summary>
        /// 移除事件,触发移除所有的游戏事件
        /// </summary>
        protected virtual void OnRemoveListener()
        {
        }

        /// <summary>
        /// 每次打开,触发了添加的打开事件
        /// </summary>
        protected virtual void OnEnable()
        {
        }

        /// <summary>
        /// 每次关闭,触发了添加的隐藏事件
        /// </summary>
        protected virtual void OnDisable()
        {
        }

        /// <summary>
        /// 每帧更新
        /// </summary>
        /// <param name="deltaTime">两帧间隔的时间</param>
        protected virtual void Update(float deltaTime)
        {
        }

        #endregion


        #region 窗体管理方法

        /// <summary>
        /// 创建UI窗体
        /// </summary>
        /// <returns>是否创建成功</returns>
        private bool Create()
        {
            if (string.IsNullOrEmpty(resName))
            {
                return false;
            }

            if (transform == null)
            {
                var obj = Resources.Load<GameObject>(resName);
                if (obj == null)
                {
                    Debug.LogError($"未找到预制件{selfType}");
                    return false;
                }

                transform = GameObject.Instantiate(obj).transform;

                transform.gameObject.SetActive(false);

                UIRoot.SetParent(transform, false, selfType == WindowType.TipsWindow);

                return true;
            }

            return true;
        }

        #endregion
    }

    /// <summary>
    /// 窗体的类型
    /// </summary>
    public enum WindowType
    {
        LoginWindow, //登录窗体
        StoreWindow, //商城窗体
        TipsWindow //提示窗体
    }

    /// <summary>
    /// 场景的类型,目的是提供根据场景类型,进行预加载
    /// </summary>
    public enum SceneType
    {
        None, //空场景
        Login, //登录场景
        Battle //对战场景
    }
}

好啦,视图层基类已创建完成,和之前的Mono相比,大概可以感觉到一点逻辑清晰了

下节见😏

一起进步

我是SKODE

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、视图层总览
  • 二、创建基类BaseWindow
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档