Unity MVC丨(八)游戏控制器:C

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

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

0 人点赞