MVC:数据模型_Model、视图_View、控制器_Controller
//控制器 --逻辑相关
用户动作反应—切换视图
public class HeroController
{
#region 单例
public static readonly HeroController _controller = new HeroController();
private HeroController()
{
_model = HeroModel._model;
}
#endregion
#region MVC_Model
private HeroModel _model;
#endregion
#region UI Event
/// <summary>
/// 初始化数据
/// </summary>
public void DataInit()
{
_model.HeroExperience = 0;
_model.HeroLevel = 1;
_model.CornCount = 0;
_model.DiamondConunt = 0;
}
public void OnAddExperienceButtonClick()
{
_model.HeroExperience += 100;
while (_model.HeroExperience >= _model .HeroLevel *10)
{
//升级后的剩余经验
_model.HeroExperience = _model.HeroExperience - _model.HeroLevel * 10;
//升级
_model.HeroLevel += 1;
//增加金币
_model.CornCount += 100;
//增加钻石
if (_model .HeroLevel%3==0) //每升三级增加钻石
{
_model.DiamondConunt += 10;
}
}
//跳出循环代表升级成功,显示升级后的经验 ----重新设置经验总值
_model.HeroExperience = _model.HeroExperience;
}
#endregion
}
//视图
通过用户交互触发事件
只负责视图显示在UI,给事件绑定变值回调,更新数据到显示UI,绑定控制器中的按钮事件
public class HeroView:MonoBehaviour
{
#region MVC_COntroller
private HeroController _controller;
private HeroModel _model;
#endregion
#region Element
private RectTransform experienceImgRect;
private Text experienceText;
private Text levelText;
private Text cornText;
private Text diamondText;
private Button addExperienceBtn;
#endregion
#region Mono CallBack
private void Awake()
{
experienceImgRect = transform.Find(UIConst.EXPERIENCE_IMG_PATH).GetComponent<RectTransform>();
experienceText = transform.Find(UIConst.EXPERIENCE_TEXT_PATH).GetComponent<Text>();
levelText = transform.Find(UIConst.LEVEL_TEXT_PATH).GetComponent<Text>();
cornText = transform.Find(UIConst.CORN_TEXT_PATH).GetComponent<Text>();
diamondText = transform.Find(UIConst.DIAMOND_TEXT_PATH).GetComponent<Text>();
addExperienceBtn = transform.Find(UIConst.ADDEXPERINCE_BUTTON_PATH).GetComponent<Button>();
_controller = HeroController._controller;
_model = HeroModel._model;
}
private void Start()
{
//绑定控制器中的按钮事件
addExperienceBtn.onClick.AddListener(_controller.OnAddExperienceButtonClick);
//给数据模型绑定变值回调
_model.OnHeroExperienceValueChange = SynchronizationExperience;
_model.OnHeroLevelValueChange = SynchronizationLevel;
_model.OnCornCountValueChange = SynchronizationCornCount;
_model.OnDiamondCountValueChange = SynchronizationDiamondCount;
//数据初始化
_controller.DataInit();
}
//同步数据模型,更新视图数据
private void SynchronizationExperience(float val)
{
experienceText.text = val.ToString()+"/"+(_model .HeroLevel*10).ToString ();
//TOBO:更新经验条显示比例
}
private void SynchronizationLevel(int val)
{
levelText.text = val.ToString();
}
private void SynchronizationCornCount(int val)
{
cornText.text = val.ToString();
}
private void SynchronizationDiamondCount(int val)
{
diamondText.text = val.ToString();
}
//UI Model 数据模型
存储游戏的一些数据,提供数据访问器
(数据值发生改变后回调事件(具体事件内容不知道))
注意:值发生变化的时候,发生的事件和同步视图
public class HeroModel
{
public static readonly HeroModel _model = new HeroModel();
private HeroModel() { }
#region OnValueChangeEvent(变值回调事件)
public System.Action<float> OnHeroExperienceValueChange;
public System.Action<int> OnHeroLevelValueChange;
public System.Action<int> OnCornCountValueChange;
public System.Action<int> OnDiamondCountValueChange;
#endregion
#region Field字段
//英雄经验
private float heroExperience;
//英雄等级
private int heroLevel;
//金币数量
private int cornCount;
//钻石数量
private int diamondConunt;
#endregion
#region 字段属性
public float HeroExperience
{
get
{
return heroExperience;
}
set
{
heroExperience = value;
if (OnHeroExperienceValueChange != null)
{
//当英雄经验发生改变的时候调用事件
OnHeroExperienceValueChange(heroExperience);
}
}
}
public int HeroLevel
{
get
{
return heroLevel;
}
set
{
heroLevel = value;
if (OnHeroLevelValueChange != null)
{
//当等级发生改变的时候调用事件
OnHeroLevelValueChange(heroLevel);
}
}
}
public int CornCount
{
get
{
return cornCount;
}
set
{
cornCount = value;
if (OnCornCountValueChange != null)
{
OnCornCountValueChange(cornCount);
}
}
}
public int DiamondConunt
{
get
{
return diamondConunt;
}
set
{
diamondConunt = value;
if (OnDiamondCountValueChange != null)
{
OnDiamondCountValueChange(diamondConunt);
}
}
}
#endregion
}
//