大家好,我是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