欢迎光临散文网 会员登陆 & 注册

unity - MVC架构简单实现

2023-05-27 18:06 作者:尘风一枚  | 我要投稿

using UnityEngine;

using System;

//模型层

public class PlayerModel

{

//数据内容

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()

{

//读取本地数据

name = PlayerPrefs.GetString("Name", "awa");

level = PlayerPrefs.GetInt("Level", 1);

exp = PlayerPrefs.GetInt("Exp", 1);

gold = PlayerPrefs.GetInt("Gold", 1);

}

//保存

public void SavaData()

{

//保存数据到本地

PlayerPrefs.SetString("Name", name);

PlayerPrefs.SetInt("Level", level);

PlayerPrefs.SetInt("Exp", exp);

PlayerPrefs.SetInt("Gold", gold);


CallUpdateEvent();

}



//建立注册机制 用于通知所有View层去更新数据

private event Action<PlayerModel> updateEvent;

//注册事件 一旦注册就更新

public void AddUpdateEvent(Action<PlayerModel> action)

{

updateEvent += action;

CallUpdateEvent();

}

//通知View层更新UI

public void CallUpdateEvent()

{

updateEvent?.Invoke(this);

}



//单例模式 1.方便外面获得Model层 2.同时保证每个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对象

public Text Name;

public Text Level;

public Text Exp;

public Text Gold;


//负责更新UI (一旦Model层有变化便会通知Controller层去调用View层方法更新UI)

public void UpdateView(PlayerModel model)

{

Name.text = " 名字:" + model.Name;

Level.text = " 等级:" + model.Level;

Exp.text = " 经验:" + 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);

}

}

unity - MVC架构简单实现的评论 (共 条)

分享到微博请遵守国家法律