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

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

简介

基于godot开源客户端引擎和go开源游戏框架pitaya,实现经典多人3D房间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
更多资料,请搜索公众号歪歪梯Club

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值