unity - MVC架構(gòu)簡(jiǎn)單實(shí)現(xiàn)

using UnityEngine;
using System;
//模型層
public class PlayerModel
{
//數(shù)據(jù)內(nèi)容
private string name;
private int level;
private int exp;
private int gold;
//屬性
public string Name { get => name; }
public int Level { get => level; }
public int Exp { get => exp; }
public int Gold { get => gold; }
//更新操作
public void AddLeve()
{
level += 1;
SavaData();
}
public void AddExp()
{
exp += 10;
if (exp >= 100)
{
exp -= 100;
level += 1;
}
SavaData();
}
public void AddGold()
{
gold += 100;
SavaData();
}
//初始化
public void Init()
{
//讀取本地?cái)?shù)據(jù)
name = PlayerPrefs.GetString("Name", "awa");
level = PlayerPrefs.GetInt("Level", 1);
exp = PlayerPrefs.GetInt("Exp", 1);
gold = PlayerPrefs.GetInt("Gold", 1);
}
//保存
public void SavaData()
{
//保存數(shù)據(jù)到本地
PlayerPrefs.SetString("Name", name);
PlayerPrefs.SetInt("Level", level);
PlayerPrefs.SetInt("Exp", exp);
PlayerPrefs.SetInt("Gold", gold);
CallUpdateEvent();
}
//建立注冊(cè)機(jī)制 用于通知所有View層去更新數(shù)據(jù)
private event Action<PlayerModel> updateEvent;
//注冊(cè)事件 一旦注冊(cè)就更新
public void AddUpdateEvent(Action<PlayerModel> action)
{
updateEvent += action;
CallUpdateEvent();
}
//通知View層更新UI
public void CallUpdateEvent()
{
updateEvent?.Invoke(this);
}
//單例模式 1.方便外面獲得Model層 2.同時(shí)保證每個(gè)Model層唯一
private static PlayerModel model;
public static PlayerModel Instance
{
get
{
if (model == null)
{
model = new PlayerModel();
model.Init();
}
return model;
}
}
}
------------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
//視圖層
public class PlayerView : MonoBehaviour
{
//需要的UI對(duì)象
public Text Name;
public Text Level;
public Text Exp;
public Text Gold;
//負(fù)責(zé)更新UI (一旦Model層有變化便會(huì)通知Controller層去調(diào)用View層方法更新UI)
public void UpdateView(PlayerModel model)
{
Name.text = " 名字:" + model.Name;
Level.text = " 等級(jí):" + model.Level;
Exp.text = " 經(jīng)驗(yàn):" + model.Exp;
Gold.text = " 貨幣:" + model.Gold;
}
}
------------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
//控制層
public class PlayerController : MonoBehaviour
{
public PlayerView m_View;
public Button AddLevel;
public Button AddExp;
public Button AddGold;
private void Start()
{
PlayerModel.Instance.AddUpdateEvent(m_View.UpdateView);
AddLevel.onClick.AddListener(PlayerModel.Instance.AddLeve);
AddExp.onClick.AddListener(PlayerModel.Instance.AddExp);
AddGold.onClick.AddListener(PlayerModel.Instance.AddGold);
}
}