上篇梳理了游戏开始初始化相关操作,并且加载了UI到场景中并且放到了对应层级里面
这里涉及与服务器的交互,这里只谈客户端的,服务器的初始化和接收等下次再说
下面来看游戏登陆相关逻辑
- 在进入Login界面点击登陆,此时都会集中到LoginHelper类中,下面来看Login干什么了
- 在初始化文章中我们知道在客户端创建了一个KcpComponent,通过这个组件创建一个Session。利用这个Session发送C2R_Login消息。并等待返回R2C_Login,这里call结合之前看的应该很好理解,这里梳理一下。Session存储RpcId和RpcInfo关系,然后将消息转化为内存流和操作码。然后通过Service发送,Service拿到对应Channel最终由Channel发送。最后接收到了R2C_Login。
- 然后利用R2C_Login带回来的adress再创建一个GateSession。
- 向GateSession加入PingComponent,组件就是向客户端不断的向Gate服务器发送消息,然后计算一下ping值
- 然后向zoneScene添加SessionComponent,这个就是个字段组件,用来存储一个Session。这里存储了GateSession
- 然后再向Gate发送C2G_LoginGate信息,并等待G2C_LoginGate信息的返回。得到返回则成功登陆
- 最后触发LoginFinish事件
登陆完成后逻辑
- LoginFinish事件就触发了展示UILobby,里面就一个进入地图。点击进入地图
- 用刚刚存储的gateSession发送C2G_EnterMap消息,G2C_EnterMap带回来了UnitId(自己)和所有Units
- 然后触发EnterMapFinish事件。加载地图场景并切换,移除UILobby,向zoneScene添加OperaComponent组件(操纵组件)
- OperaComponent就是鼠标右键点击了地面,然后就会向Gate发送C2M_PathfindingResult消息,注意这个消息是IActorLocationMessage