Unity MVC丨(七)一个如何使用M、V的Demo

2024-08-15 19:02:34 浏览数 (2)

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

本系列博客地址:传送门

一、本节目标

  • 运行游戏,自动生成UIRoot(存放UI窗体的物体)
  • 运行游戏,自动生成我们代码配置的指定生成的UI窗体
  • 这个UI窗体生成时已绑定了Button事件
  • 当按下C键,隐藏该UI窗体

效果展示:

二、操作步骤

1、创建窗体预制体

这个窗体预制体,就是我们要生成的UI。 我们的UI,都不是直接直接放在Unity层级面板上的,而是代码根据需要自动生成的。

预制体如下,且放在Resources/UI/Window文件夹下。

2、创建View层:StoreWindow 窗体脚本

StoreWindow 窗体脚本,功能是:

  • 是一个商城窗体脚本,定义了该窗体的资源名称(跟Resources下哪个UI绑定)、是否常驻等等信息
  • 继承了BaseWindow,因此拥有完整生命周期(基类的覆写),我们可在这些覆写函数中,实现我们的功能。(比如按下C键,隐藏该UI窗体)

该View类型的脚本,都放在Assets/MVCLibrary/View下。

脚本内容如下:

代码语言:javascript复制
using System.Collections;
using System.Collections.Generic;
using MVCLibrary.View;
using UnityEngine;

public class StoreWindow : BaseWindow
{
    public StoreWindow()
    {
        resName = "UI/Window/StoreWindow";
        resident = true;
        selfType = WindowType.StoreWindow;
        sceneType = SceneType.Login;
    }

    protected override void Awake()
    {
        base.Awake();
    }

    protected override void RegisterUiEvent()
    {
        base.RegisterUiEvent();
        foreach (var button in buttonList)
        {
            switch (button.name)
            {
                case "BuyButton":
                    button.onClick.AddListener(OnBuyButtonClick);
                    break;
            }
        }
    }

    protected override void OnAddListener()
    {
        base.OnAddListener();
    }

    protected override void OnRemoveListener()
    {
        base.OnRemoveListener();
    }

    protected override void OnEnable()
    {
        base.OnEnable();
    }

    protected override void OnDisable()
    {
        base.OnDisable();
    }

    public override void Update(float deltaTime)
    {
        base.Update(deltaTime);

        if (Input.GetKeyDown(KeyCode.C))
        {
            Close();
        }
    }
    
    private void OnBuyButtonClick()
    {
        Debug.Log("BuyButton 点击了");
    }
}
3、完成StoreWindow的初始化

我们上节(传送门)讲过,所有的实现了 BaseWindow 的 View 脚本,要在窗体管理类 WindowManager 中进行初始化,添加进字典。

只要在 WindowManager 的构造函数里添加进去就好了。如下所示:

代码语言:javascript复制
    /// <summary>
    /// 构造函数,完成窗体初始化
    /// </summary>
    public WindowManager()
    {
        //我们就在这,添加我们要用到的窗体
        //商城
        windowDic.Add(WindowType.StoreWindow, new StoreWindow());
    }
4、启动开关

所有基本逻辑都写完了,也初始化了,现在就要打开该页面了。

新建一个 MVCTest 脚本,内容如下:

代码语言:javascript复制
using System.Collections;
using System.Collections.Generic;
using MVCLibrary.View;
using UnityEngine;

public class MVCTest : MonoBehaviour
{
    void Start()
    {
        WindowManager.Instance.OpenWindow(WindowType.StoreWindow);
    }
}

挂载到场景中,运行看看吧。

一起进步

我是SKODE

0 人点赞