302切换状态机
房间初始化的时候要设置状态机,每个房间都有一个状态机,状态机用字典FSM存储,房间初始化之后进入到确认状态,再开发确认状态对应的逻辑
303确认匹配数据推送
优化部分:SendMsg在5V5里面把每个玩家的信息发过去,在SendMsg里面的底层每次都要序列化,可以先将其序列化出来
304PETimer计时服务
发送初始数据之后,等待客户端的每一次确认,然后再广播出去。如果玩家在匹配成功的界面不同意进入

此时应由TimerSvc倒计时30s解散房间
305客户端跳转匹配确认界面
初始化定义倒计时,在本地定义倒计时就行,不需要很精确
306刷新匹配确认显示
常规拼UI,先处理左边一半遍历左边,若只有一个人匹配需将其他Player SetActive设置为false
317广播英雄选择数据
扩展:地图的更好可以参考选人的方式如何做,模式是一样的
319加载战斗地图
private Action prgCB = null;
/// <summary>
/// 异步场景加载
/// </summary>
/// <param name="sceneName">场景名字</param>
/// <param name="loadRate">加载进度</param>
/// <param name="loaded">加载完成通知服务器</param>
public void AsyncLoadScene(string sceneName,Action<float> loadRate,Action loaded)
{
AsyncOperation sceneAsync=SceneManager.LoadSceneAsync(sceneName);
prgCB = () =>
{
float progress = sceneAsync.progress;//获取到加载进度
loadRate?.Invoke(progress);//加载过程中每帧回调,以反应当前进度至loadRate
if (progress == 1) {
loaded?.Invoke();
prgCB = null;
sceneAsync = null;
}
};
}
322服务器切换战斗状态
开始做战斗,所有客户端保持一致通过服务器的帧进行驱动的,个人加载完本地资源之后是不能进行战斗的,必须请求服务器个人加载完毕,是否开始战斗。服务器收到所有人的请求之后确认所有人都已经加载资源完成,通知所有客户端开始进行战斗,驱动所有战斗的进行
playWnd.SetWndState();//PlayWnd UIPpefab的打开