本文总结SnowMan手游的客户端设计以及服务器架构
语言
客户端采用c#
编写,服务端采用c/c++
编写
客户端设计
客户端分为四个场景,作用分别如下:
- UI_scene:负责PVM和PVP对战模式选择UI
- pvm-demo:负责PVM对战游戏场景
- pvp-ui:负责PVP对战模式UI
- pvp-demo:负责PVP对战游戏场景
实现功能
- PVM:简单的敌人AI,具有暂停、退出按钮,同时可以在每局结束时选择再来一局或者退出游戏
- PVP:具有基本的登录、注册,玩家匹配,对战功能,同时可以重复对战,具有基本的对战流程
流程图示
- 模式选择
- 登录
- 注册
- 对战界面
- 匹配界面
- pk界面
- pvp对战界面
服务端架构
主进程创建登录进程,登录进程监听8080端口,并采用多线程并发处理login或者register;主进程监听5000端口,并采用多进程并发处理房间对战,服务端架构图如下:
服务器pvp同步架构
服务端采用client-server
方式,以固定步长为一帧:
- 客户端在一帧内(服务端同步帧)将状态改变(方向、射击、以及伤害和回血)传递给服务端
- 服务器接受客户端数据,更新状态,并将结果同步给所有客户端
- 客户端收到同步包后,更新客户端数据,以同步后的状态执行
- 服务端如果在同一帧内收到多次状态改变,则合并这些状态,比如INPUT3为向右移动一格+发射雪球,INPUT4为跳起,则合并为跳起+发射雪球
项目主要难点
- 1、客户端场景UI设计与场景切换
- 2、Google protobuf客户端和服务端使用
- 3、c mysql使用
- 4、unity c#网络编程
不足与后续计划
不足
- 1、游戏在Unity Editor中运行正常,但打包成Apk包后PVP部分无法正常运行(怀疑是
System.Net.Sockets
存在问题) - 2、游戏ui尺寸存在问题,需要完善
- 3、pvp对战模式设计不够完善,游戏退出存在问题
- 4、服务端设计不够健壮,容易crash
- 5、不支持重连机制
后续计划
- 1、修正PVP BUG
- 2、修改ui尺寸
- 3、改善GameServer和Unity Client,使其足够健壮
- 4、支持重连机制
参考
- unity-2d-tutorial-getting-started
- Tutorial: How to Make Flappy Bird in Unity3D
- unity网络编程学习(4)与java服务器的Socket通信
- C#中实现byte[]与任意对象互换(服务端通讯专用)
- blog
- 10-years-of-game-programming
- 手游后台PVP系统网络同步方案总结
- Time in milliseconds
- C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信
- protobuff3.0.0 cannot use in unity3d 5.3.2 ,why?
- UNITY-D-NETWORK-GAME-PROGRAMMING
- networking-with-protobuf-example
- Unity 2D入门基础教程
- Linux下C++访问MySQL数据库
- player-health
- C++使用protobuf(Linux下)
- unity ui
- Protocol Buffers v3.1.0 Source code (zip)