UMVCL9——MP(MVVM)基本实例
MP(MVVM)基本实例
还是和上一章相同的UI需求
假设我们有一个主面板,它的各个UI控件需要的效果如下
有一个选角面板,它的各个UI控件需要的效果如下
前置知识
本章的代码编写使用了Unity小框架的UI管理器和UI基类,需要先学习这方面内容才能理解下列代码
Model
直接使用MVC那一章的Model代码即可
Panel
笔者注:实际学习时使用的对老师课上小框架的改编,实际代码可能与课上不符,你可以忽略掉那些意义不明的参数
- 找控件 通过集成小框架中的UI基类实现了(只需要通过控件名即可获取控件)
- 逻辑处理
- 数据更新
MP_MainPanel.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| using UnityEngine.UI;
public class MP_MainPanel : BasePanel {
void Start() { UpdateInfo(PlayerModel.Instance); PlayerModel.Instance.AddEventListener(UpdateInfo); }
private void OnDestroy() { PlayerModel.Instance.RemoveEventListener(UpdateInfo); }
protected override void BtnOnClick(string btnName) { base.BtnOnClick(btnName); switch (btnName) { case "btnRole": UIManager.Instance.ShowPanel<MP_RolePanel>(false); break; } }
public void UpdateInfo(PlayerModel data) { GetControl<Text>("txtName").text = data.Name; GetControl<Text>("txtLev").text = "LV." + data.Level;
GetControl<Text>("txtMoney").text = data.Money.ToString(); GetControl<Text>("txtGem").text = data.Gem.ToString(); GetControl<Text>("txtPower").text = data.Power.ToString(); } }
|
MP_RolePanel.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;
public class MP_RolePanel : BasePanel {
void Start() { UpdateInfo(PlayerModel.Instance); PlayerModel.Instance.AddEventListener(UpdateInfo); }
private void OnDestroy() { PlayerModel.Instance.RemoveEventListener(UpdateInfo); }
protected override void BtnOnClick(string btnName) { base.BtnOnClick(btnName); switch (btnName) { case "btnClose": UIManager.Instance.HidePanel<MP_RolePanel>(false); break; case "btnLevUp": PlayerModel.Instance.LevelUp(); break; } }
public void UpdateInfo(PlayerModel data) { GetControl<Text>("txtLev").text = "LV." + data.Level; GetControl<Text>("txtHp").text = data.Hp.ToString(); GetControl<Text>("txtAtk").text = data.Atk.ToString(); GetControl<Text>("txtDef").text = data.Def.ToString(); GetControl<Text>("txtCrit").text = data.Crit.ToString(); GetControl<Text>("txtMiss").text = data.Miss.ToString(); GetControl<Text>("txtLuck").text = data.Luck.ToString(); } }
|