UMVCL9——MP(MVVM)基本实例

MP(MVVM)基本实例

还是和上一章相同的UI需求

假设我们有一个主面板,它的各个UI控件需要的效果如下

image

有一个选角面板,它的各个UI控件需要的效果如下

image

前置知识

本章的代码编写使用了Unity小框架的UI管理器和UI基类,需要先学习这方面内容才能理解下列代码

Model

直接使用MVC那一章的Model代码即可

Panel

笔者注:实际学习时使用的对老师课上小框架的改编,实际代码可能与课上不符,你可以忽略掉那些意义不明的参数

  1. 找控件 通过集成小框架中的UI基类实现了(只需要通过控件名即可获取控件)
  2. 逻辑处理
  3. 数据更新

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
{
//1.找控件 通过集成小框架中的UI基类实现了
//2.逻辑处理
//3.数据更新

// Start is called before the first frame update
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
{
//1.找控件 通过集成小框架中的UI基类实现了
//2.逻辑处理
//3.数据更新

// Start is called before the first frame update
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();
}
}