副本系统是一个独立出来的业务逻辑,我们需要新建一个FubenSys

大体上FubenSysMainCitySys的设计是差不多的,需要管理自己的UI Window,需要实现一些副本业务核心逻辑。

在设计上,MainCityWnd只能调用MainCitySys提供的API,如果想用MainCityWnd打开副本选择界面,只能先使用MainCitySys调用FubenSys再打开副本选择界面,这也是设计规范的体现。

副本的PlayerData

副本的PalyerData只用一个int定义即可

1
public int fuben;//记录当前打到哪一关

然后根据这个PalyerData修改DBMgr即可

初始化的值

1
fuben = 10001

副本的界面

副本界面

我们通过对副本号取余来刷新副本界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void RefreshUI()
{
int fbid = pd.fuben;
for (int i = 0; i < btnFubens.Length; i++)
{
if (i < fbid % 10000)
{
SetActive(btnFubens[i].gameObject);//符合条件的副本button激活
if (i == fbid % 10000 - 1)
{
pointerTrans.SetParent(btnFubens[i].transform);//设置“当前任务”图标的位置
pointerTrans.localPosition = new Vector3(105, 150, 0);
}
}
else
{
SetActive(btnFubens[i].gameObject, false);
}
}
}

副本的通信协议

1
2
3
4
5
6
7
8
9
10
11
12
13
#region 副本战斗相关
[System .Serializable]
public class ReqFBFight
{
public int fbid;
}
[System.Serializable]
public class RspFBFight
{
public int power;
public int fbid;
}
#endregion

新增错误码LackPower

副本的配置

在客户端中,我们将副本的配置写在MapCfg中,在其中增加每个Map需要消耗的体力就可以了,只需要稍微修改一下配置的xml即可。

如果需要更新配置的xml,可以打开之前配置相关的Excel,在“开发工具”——“源”中删除老的映射,并将新的“xml_format”导入进来,重新映射成功后再导入老的xml,Excel会自动将老的数据重新映射上去,将新的映射填上再导出一次即可

这个体力就是为了每次进入副本之前,校验一下体力是否充足

在服务端中,只需要记录每个副本地图所消耗的体力数据即可:

1
2
3
4
public class MapCfg : BaseData<MapCfg>
{
public int power;
}