MVC

MVC概述

  • MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范。
    根据名称定义在MVC中可以分为三层,也就是Model 层,View 层,Controller 控制层
  • Model(模型) 模型层,更确切的说应该是数据层,在这一层面我们只需要定义各种数据。
  • View(视图) 视图层,也就是表现层,我们在游戏里所能看得到的各种UI等,就归属于这一层面管辖,同时他还是一个事件派发器,所有的事件应当由这里注册进Controller。
  • Controller(控制器) 控制层,应该叫逻辑层,这里主要负责各种逻辑的实现。

image

image

image

简单MVC

PlayerData_Model.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine; 
public class PlayerData_Model
{
    //单例
    private static PlayerData_Model instance;
    public static PlayerData_Model GetModel()
    {
        if (instance == null)
        {
            instance = new PlayerData_Model();
        }
        return instance;
    }
    private PlayerData_Model() { } 
    private string playerHead;//头像数据
    public delegate void ChangePlayerHead(string newHead);
    public ChangePlayerHead changePlayerHead;//委托
    public string PlayerHead//属性
    {
        get
        {
            return playerHead;
        }
        set
        {
            playerHead = value;
            if (changePlayerHead != null)
            {
                changePlayerHead.Invoke(playerHead);
            }
        }
    } 
}

Player_View.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player_View : MonoBehaviour
{
    Transform gameUI;
    Image playerHead;
    Button changePlayerHeadBtn;
    void InitUI()//UI初始化
    {
        gameUI = GameObject.Find("GameUI").transform;
        playerHead = gameUI.GetChild(0).GetComponent<Image>();
        changePlayerHeadBtn = gameUI.GetChild(7).GetComponent<Button>();
    }
    void InitEvent()//事件初始化
    {
        PlayerData_Model.GetModel().changePlayerHead = ChangePlayerHead;
        changePlayerHeadBtn.onClick.AddListener(Player_Controller.GetController().ChangePlayerHead);
    } 
    void Start()
    {
        InitUI();
        InitEvent(); 
    }
    void ChangePlayerHead(string newHead)//改变头像
    {
        Sprite sprite = Resources.Load<Sprite>(newHead);
        playerHead.sprite = sprite;
    }
}

Player_Controller.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player_Controller
{
    private static Player_Controller instance;
    public static Player_Controller GetController()
    {
        if (instance == null)
        {
            instance = new Player_Controller();
        }
        return instance;
    }
    private Player_Controller() { }
    //数据处理方法
    public void ChangePlayerHead()//改变头像
    {
        //这里就两个头像来回切换了,反正主要讲的又不是这个
        switch (PlayerData_Model.GetModel().PlayerHead)
        {
            case "HuGe":
                PlayerData_Model.GetModel().PlayerHead = "PengYuYan";
                break;
            case "PengYuYan":
                PlayerData_Model.GetModel().PlayerHead = "HuGe";
                break;
        } 
    }
}

原则上来说,View层应当不包含任何逻辑,但每个人心中都住着一个哈姆雷特嘛,我倒是觉得更新UI的逻辑放在View层会更加的明了,最终效果的话大家可以自己去实验吧

posted @ 2022-02-21 22:14  镜子-眼泪  阅读(61)  评论(0)    收藏  举报