文章目录
- 前言
- MVC基本概念
- 示例
- 流程图
- 效果预览
- 后话
前言
在Unity中,MVC(Model-View-Controller)框架是一种架构模式,用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构,提高代码的可维护性和可扩展性。
MVC基本概念
Model(模型)
- 职责:管理应用程序的数据逻辑和业务规则。它独立于视图和控制器,不直接处理用户输入。
- 示例:游戏中的角色属性(如生命值、得分)、配置文件、数据持久化。
View(视图)
- 职责:负责用户界面的呈现和显示数据。它从模型获取数据,并显示给用户。
- 示例:UI面板、按钮、文本框、动画展示。
Controller(控制器)
- 职责:处理用户输入,并将其转换为模型和视图的操作。它连接模型和视图,并控制它们之间的交互。
- 示例:响应按钮点击、处理输入事件、调用模型的更新方法。
示例
先搭建个UI
PlayerModel.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class PlayerModel
{
private int level;
public int Level
{
get { return level; }
}
private int money;
public int Money
{
get { return money; }
}
// 单例模式,确保数据唯一性
private static PlayerModel instance;
public static PlayerModel Instance
{
get
{
if (instance == null)
{
instance = new PlayerModel();
// 创建实例初始化
instance.Init();
}
return instance;
}
}
private event UnityAction<PlayerModel> updateEvent;
public void Init()
{
// 初始化数据,一般在这里读取表配置啥的
level = 1;
money = 100;
}
public void LevelUp()
{
level++;
SaveInfo();
}
public void AddMoney(int num)
{
money += num;
SaveInfo();
}
public void SaveInfo()
{
// 保存数据并更新
Debug.Log("SaveInfo");
UpdateInfo();
}
public void UpdateInfo()
{
// 更新数据的时候给Controller发通知
updateEvent?.Invoke(this);
}
public void AddUpdateEvent(UnityAction<PlayerModel> action)
{
updateEvent += action;
}
public void RemoveUpdateEvent(UnityAction<PlayerModel> action)
{
updateEvent -= action;
}
}
PlayerView.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerView : MonoBehaviour
{
// 先绑定UI
public Text levelText;
public Text moneyText;
public void UpdateView(PlayerModel playerModel)
{
// View 负责显示数据,不负责逻辑
levelText.text = playerModel.Level.ToString();
moneyText.text = playerModel.Money.ToString();
}
}
PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class PlayerController : MonoBehaviour
{
// 绑定View
public PlayerView playerView;
// 绑定Button
public Button moneyBtn;
public Button levelBtn;
private void Start()
{
// 把View的更新方法绑到Model的通知列表里
PlayerModel.Instance.AddUpdateEvent(playerView.UpdateView);
// 绑定Button的点击事件
levelBtn.onClick.AddListener(PlayerModel.Instance.LevelUp);
moneyBtn.onClick.AddListener(PlayerModel.Instance.AddMoney);
}
}
- 绑定组件
流程图
效果预览
后话
通过这种分离模式,我们将数据处理、用户交互和显示逻辑分离开来,使得代码更易于管理和维护。后期可以根据需要扩展这些基本类,例如增加更多的 UI 元素或更复杂的交互逻辑。
enjoy it ~