从0到1实现FPS房间对战游戏

  • 简介
  • 服务器结构
  • 序列化实现
  • demo获取

简介

基于godot开源客户端引擎和go开源游戏框架pitaya,实现经典多人3D房间fps射击游戏
立足开源才能站在巨人肩膀去跳跃,本文核心在于对各大开源框架的汇总结合与使用经验分享

  • godot
    和unity差不多,国外用的比较多的免费版游戏引擎
    优点:代码开源可修改完全免费,gscript优点如python,短小精炼
    缺点:脚本使用自己研发的gdscript,使用第三方库绑定麻烦,一般都得自己翻译实现一遍
    https://docs.godotengine.org/zh_CN/latest/index.html
  • pitaya
    go游戏服务器,支持服务器间基于nats和etcd做rpc
    官方没有处理并发消息顺序控制,可以看下我的另外一篇文章,多线程游戏服务器实现的处理
    https://github.com/yythlj/gogame
    https://blog.csdn.net/weixin_44627989/article/details/108692393
  • fps-demo
    mit开源的godot多人局域网fpsdemo
    https://github.com/blockspacer/Godot-3.2-Multiplayer-FPS

服务器结构

  • godot战斗服
    因为3d游戏的射击等动作,需要用到地图的阻挡、相机穿透等场景算法判断,为了方便和客户端战斗逻辑同步管理,战斗还是使用godot代码独立部署一个战斗服做指令同步与验证,也好做玩家操作的合法验证(相机场景穿透计算等,这些不使用godot引擎额外实现太麻烦)
    另外godot提供了便捷的udp帧同步框架,可以作为独立战斗同步服务器
  • mongodb数据库
    选择mongodb基本是游戏最大方便使用,增删字段不需要改表
  • pitaya服务器
    gscript在第三方支持的弱势,且主要面向游戏场景的代码风格,不利于业务
    因此业务内容还是使用pitaya用go编写,godot服务器与go服务器之间需要通信通道,维持房间信息
  • 玩家逻辑
    tcp连接go服务器登陆与请求业务,进入战斗后,开辟udp连接godot战斗服进行战斗
    godot战斗完成将结果反馈go服务器做业务
  • 序列化选择
    pitaya支持基于byte与json的序列化,但是因为这里涉及到与godot的通信需要跨语言,且gdscript的数据类型与go不对齐,因此只能基于byte做序列化协议

序列化实现

目前pitaya协议没有gdscript的版本提供,我自己翻译官方go版本的代码,实现了一版gdscript的
https://github.com/yythlj/gdscript-pitaya-protocol(未支持数据压缩,zlib包gdscript没提供)
需要同步调整pitaya此处的握手包数据,不采用json,可参考protocol.gd的解包处理,也不麻烦

protocol.gd实现预览:

demo获取

关注公众号后台留言,可获取相关代码pitaya握手包处理,以及我对Godot-3.2-Multiplayer-FPS的修改版(额外支持了多房间的对战处理,并接入了pitaya服务器tcp通信)
修改版演示:

更多文章,请搜索公众号歪歪梯Club

【从0到1实现多人FPS房间对战游戏】相关推荐

  1. 从零学习游戏服务器开发(一) 从一款多人联机实时对战游戏开始

    写在前面的话 经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善.代码注释少.工程数量大,而无从下手.本文将来通过一个多人联机实时 ...

  2. 分享一套仿英雄联盟大型多人联机实时对战游戏源码(包含完整服务器和客户端源码)...

    源码介绍 这是一款类似英雄联盟的 5V5 实时对战游戏,服务器端使用 C/C++ 开发,同时支持 Linux 和  Windows 系统部署:客户端使用 C# + Unity3D 开发. 我们先来看下 ...

  3. 一套仿英雄联盟大型多人联机实时对战游戏源码(包含完整服务器和客户端源码)...

    源码介绍 这是一款类似英雄联盟的 5V5 实时对战游戏,同时支持 Linux 和  Windows 系统部署. 我们先来看下这个游戏的内容吧,这是在我机器上编译后运行的效果图: 登录界面 进入后台配置 ...

  4. wince 百度地图懒人包_【分享】路虎高德V6.0+V33图资懒人包(WIN CE)【亲测】

    本帖最后由 hnxzsk 于 2016-8-1 09:50 编辑 [分享][转载][亲测][可用] 路虎高德V6.0+V33图资懒人包 看到网友发的是凯立德的地图,有朋友说经常用的是高德,本人就分享过 ...

  5. .net 实时通信_【WebSocket】实时多人答题对战游戏

    本文公众号来源:后端技术漫谈 作者:蛮三刀把刀 前言 前两章教程,我们使用WebSocket的基础特性打造了一个小小聊天室,并在第二章对其进行了集群化改造. 系列教程回顾: 手把手搭建WebSocke ...

  6. 答题对战方案java_使用WebSocket实现实时多人答题对战游戏

    前言 前两章教程,我们使用WebSocket的基础特性打造了一个小小聊天室,并在第二章对其进行了集群化改造. 系列教程回顾: 在本文中,我将介绍如何使用WebSocket向实时多人答题对战游戏提供服务 ...

  7. [WebSocket]使用WebSocket实现实时多人答题对战游戏

    前言 前两章教程,我们使用WebSocket的基础特性打造了一个小小聊天室,并在第二章对其进行了集群化改造. 系列教程回顾: [WebSocket]第一章:手把手搭建WebSocket多人在线聊天室( ...

  8. JAVA跨考_考研人的2019——一战跨考清华计算机的血泪史

    2019已经过去好多天了,看到大师傅们纷纷秀出了他们的年终总结,而每年都有积极参与的我,却到现在还迟迟没有写下这段时光,我无法原谅我自己,抱歉,俺太迟了. 考研人的 2019 终究是苦逼的一年,从确定 ...

  9. 多人对战游戏观察者模式分析

    一.观察者模式 观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标 ...

最新文章

  1. UITextField 键盘
  2. CTFshow 命令执行 web57
  3. 通话过程中显示呼叫失败_电销行业如何破局?深海捷云呼叫中心协助企业通过挑战...
  4. .NET开发者省份分布排名
  5. uva 1331——Minimax Triangulation
  6. 十五、CSS 3新特性详解(三)——3D转换(位移、旋转、呈现)、透视perspective、旋转rotateX、Y、Z、呈现transform-style
  7. 搜狐视频app如何设置仅自己可看我的关注列表
  8. 文件拷贝(字符、字节)
  9. ims系统 呈现服务器,基于IMS的呈现服务器的设计与实现
  10. ZOJ - 2865 A very easy task
  11. Appium安装、脚本录制执行
  12. asp.net扫描仪编程及ajax图片数据上传
  13. html动画如何延迟,css3animation延迟
  14. 目标检测yolo, voc, coco的BBox格式转换
  15. 【uni-app】uni-app 封装 uni.request 携带请求头
  16. Pandorabox(Openwrt) 双宽带(WAN) 叠加网络实战
  17. 空间几何-欧拉角、四元数、重投影误差
  18. 禁用zookeeper admin页面
  19. PointNet网络结构详细解析
  20. RK3399驱动开发 | 08 - RK3399显示系统详解(基于RK SDK Linux 4.4.194内核)

热门文章

  1. 用 MSER 算法提取特征区域
  2. 编程金融小白学 股票期权 lv.3 PCP 平价
  3. 2002年在长沙一家软件公司编写医院系统文档的故事
  4. Prometheus PromSQL
  5. 四平战役(1946年)作战地图
  6. 微信,难以承受腾讯之重
  7. tcpcopy mysql_tcpcopy+mysql压力测试
  8. SAP/R3模块概述---生产计划和控制
  9. 【求职】百度 Java 方向面经
  10. 性能优化(11)-AndroidGodEye解析之流畅度(sm)