a small game - SnowMan

| 分类 技术  | 标签 Unity 

本文总结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、支持重连机制

参考


上一篇     下一篇