大家好,我是SKODE。 小提示:选中左侧目录,可快速找到所需内容
本系列博客地址:传送门
一、游戏控制器总览
功能介绍:
控制器,与视图类,是一一对应的。有多少UI,就有多少对这个。
比如下面创建的商城控制器,与商城视图类,是相对应的。
二、创建控制器
在Assets/MVCLibrary/Controller下,创建商城控制器 StoreCtrl
该控制器,示意的功能是:
- 给商店数据层M存储数据
- 得到商店数据层M的数据
内容如下:
代码语言:javascript复制using System.Collections;
using System.Collections.Generic;
using MVCLibrary.Model;
using UnityEngine;
public class StoreCtrl : Singleton<StoreCtrl>
{
/// <summary>
/// 给数据层保存数据
/// </summary>
public void SaveProp(Prop prop)
{
StoreModel.Instance.Add(prop);
}
/// <summary>
/// 得到数据层数据
/// </summary>
public Prop GetProp(int id)
{
return StoreModel.Instance.propDic[id];
}
}
三、怎样使用控制层C
我们看到控制层C,也仅仅是提供了对数据层的读写,但谁调用了这些方法呢?
是我们的V层了!视图层。
M层,数据层存储数据
C层,控制器提供对M层读写的方法
V层,视图层,一方面实现自身功能(定义自身、提供接口),在自己的生命周期中做一些事情,一方面,使用控制器C层的方法, 完成整个循环!
现在我们再看看完整的 商城窗体 视图层V代码:
代码语言:javascript复制using System.Collections;
using System.Collections.Generic;
using MVCLibrary.Model;
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 点击了");
//使用控制层代码
StoreCtrl.Instance.SaveProp(new Prop());
StoreCtrl.Instance.GetProp(1001);
}
}
好了,到这,MVC基本流程讲解完了
下节,再来最后总结一下,本系列结束。
一起进步
我是SKODE