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



简单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层会更加的明了,最终效果的话大家可以自己去实验吧

浙公网安备 33010602011771号