*当前价格=全栈MOBA源码+3个3D英雄模型(含动作和技能特效)+40个3d粒子特效+19个PSD UI源文件+VIP群+QQ技术交流群
*绝对物超所值!(其中单个3D角色模型动作外包均价就1万以上)
*cocos3d的第一个比较成熟的moba项目案例。
*包含子系统:商城、排行榜、背包、签到、抽奖、英雄、强化、聊天、匹配3v3
*购买此项目即可拥有素材+源码版权,可商用。
购买链接
https://store.cocos.com/app/detail/6023
买前必读
1、本套源码不可转卖,不可众筹,谢谢支持!
2、建议大家不要盗版,盗版多了,作者就没兴趣更新了。
3、基于本套源码二开的产品,未经授权,不可向第三方分享和出售源码,授权加V:bcp199(注明来意)
。
4、虚拟商品不支持退款。
5、购买源码用户联系管理员微信bcp199,提供订单号即可加入 微信vip学习群。
6、扫下面的二维码可加入围观群,抢先体验。
开发环境
- 引擎版本:Cocos Creator 3.8.2
- 编程语言:后端 Java、前端 TypeScript
已适配平台
H5 | 微信小游戏 | Android原生 | iOS原生 | 抖音小游戏 | OPPO小游戏 | vivo小游戏 |
---|---|---|---|---|---|---|
✔ | ✔ | ✔ | ✘ | ✘ | ✘ | ✘ |
游戏介绍
- MOBA实时pk采用后端java+netty+protoc,前端cocos creator 3.8.2。
- 前后端实现protoc的自动生成,自动拷贝到对应的目录。
- 用户改为网络协议后只需要点下cmd可执行文件即可。
- 项目数据配置文件采用json,由excel生成。
- 使用excel可以快速高效的编辑数据,然后生成的json文件可以在程序中高效的读取。
- 后端采用服务分离的方式 大厅服+战斗服,战斗服采用帧同步实现,服务器端只做消息转发,不计算战斗逻辑。由客户端计算战斗逻辑。客户端玩家无操作则不封包上传服务器,大幅度降低玩家流量,提高客户端性能。前后端有效代码加起来有15万多行。适合学习、二次开发上线。
- 在此项目基础上二次开发类似王者荣耀或者300大作战的产品,至少可节省半年的开发工作量。有了此项目的代码基础,可修改成其它任意类型moba游戏。
- 有3个3D英雄(含模型动作特效),40个3d粒子特效+19个PSD UI源文件,超值。
- 按照市场价格美术资源1个3D角色模型和几个动作(按外包均价在1万以上),一个UI界面1000,一个特效300~500
项目帧同步介绍
一、帧同步基础逻辑
- 客户端用于处理战斗逻辑,每隔66ms向服务器发送玩家操作数据,由于考虑到客户端h5性能,改为玩家无操作则不向服务器发送数据
- 服务器只负责转发客户端操作,每隔66ms向同房间玩家同步操作数据
- 服务器收到玩家发送操作数据的同时将按照服务器的帧号将数据存起来
- 服务器将在n+1帧向玩家同步n帧操作数据
- 客户端解析服务端发送的帧数据更新逻辑位置,渲染位置在update中一直插值平滑的追赶逻辑位置
二、浮点数问题
- 放大系数取整法 (小数误差一般都是在小数点最后几位,将玩家初始渲染位置放大然后取整,后面根据放大后的数据进行运算就可以了)
- 查表法 (三角函数sin、cos在不同平台下运算会有小数误差,可以将每个角度的x、y分量存在配置文件中,这样用的时候直接查就可以了,降低了运算上的消耗)
- 使用定点物理数学库,项目使用decimal.js,更多定点物理库可查看JS、TS最好用的定点数库
三、丢包问题
- 客户端丢包
没有太多影响,下一帧马上就能处理 - 服务器丢包
客户端上传需要补发的帧号,服务器在下一帧会补发丢失的帧操作
四、插值
渲染位置插值跟随逻辑位置,渲染旋转插值跟随逻辑旋转,使表现丝滑流畅。
五、断线重连
连上后会从当前进度加速播放,直到最新帧
六、预表现
预表现自己是根据客户端的实时操作进行预演,预表现其它玩家是根据玩家最后一次操作进行预演,然后根据服务器响应的权威移动操作进行和解,实现类似单机游戏的移动体验。
七、服务器移动帧的预测
服务器移动帧自动往后推演两帧,比如99帧是移动,当100帧服务器响应玩家空操作,那么我们设置100帧是99帧的移动操作,101帧也一样,当玩家连续3个操作都是空操作的时候才停止预测。可以避免用户因网络延迟提交,导致服务器某些移动帧没采集到,移动帧的间隙导致客户端的卡顿,能够提升客户端移动的流畅度。
MOBA帧同步项目案例介绍
1.前言
- 众所周知 《王者荣耀》 《英雄联盟手游》 都是收入榜前5的大作,但是其中moba的份额也不都是这两个吃完,像《300大作战》从端游到手游到小游戏都有开发,而且端游和手游的表现也很亮眼,操作体验不输王者,现在《300大作战》也有微信小游戏,他是IAA和IAP混合运营,在moba品类唯一存在,自然量都给了他了,大家可以去体验下,这就是我们的竞品,用的laya引擎开发,接下来我们会使用cocos引擎来实现并超越他,让更多cocos开发者可以学习和借鉴,当然做出一个创新moba玩法的小游戏就更好了,在谷歌上有几款很远创意的moba游戏,下载量也有过亿的作品,这个品类相对于其他的品类,是少很多的,所以掌握开发moba游戏的帧同步技术,不仅可以做出《王者荣耀》,你也可以实现steam爆火的联机游戏《帕鲁帕鲁》。
2.介绍帧同步和状态同步
- 帧同步主要是为了保证某些类型的游戏在同步时,可以保证很好的游戏体验。游戏类型通常包括,竞技类游戏,如MOBA、射击类、格斗类,这类游戏的特点是要求精确的打击伤害判定和及时的反馈。
战斗逻辑在本地计算。网络只转发玩家的操作信息(移动、攻击等指令),不同步玩家的状态信息(位置、旋转、血量等状态)。因为逻辑在本地计算,所以必须保证所有客户端可以计算出一致的结果。
说到帧同步,不得不提状态同步, 这两种技术最大的区别就是战斗逻辑写在什么地方。
状态同步简单来说就是有一个权威服务器运行着一个没有图形界面的客户端,然后服务器收集所有人的操作数据,计算后再把所有人的关键数据广播给所有人,玩家的客户端只是服务器的一个播放展示。
帧同步中的每一个客户端都是要计算所有数据,服务器只需要转发彼此的操作即可。 - 开发效率:因为战斗逻辑都写在客户端,服务端只负责转发操作消息,双端开发的时候不需要做额外的对接工作,所以帧同步开发效率高。
- 流量消耗:状态同步需要转发状态信息,会包含很多信息,而帧同步只转发操作信息,所以流量消耗小。
- 细节反馈:帧同步的核心优势就在这里,客户端帧同步按操作命令来实现的战斗细节处理的更好,能实现更多微操,如多段技能,旋转大刀持续3秒,被攻击的会减速,可以移动攻击(状态同步比较难实现),更自然和流畅。
- 网络波动:帧同步因为追求细节操作的反馈,所以当网络波动高的时候,会受很大影响,但是使用UDP可以最大程度的解决这个问题,而状态同步大部分是使用TCP,需要传输的数据量大,在网络波动的时候,会比较慢,对游戏体验不够好。而帧同步是天然支持UDP,除此之外,需要加上预演+和解和插值平滑,来让玩家感觉到没延迟。
- 安全性:因为状态同步里,核心战斗逻辑都在服务端计算验证,所以相对安全。虽说帧同步反外挂较差,但是同样也有很多解决方案,比如事后发现惩罚处理,或者法务处理,或者在处理结果时以多个客户端上传的结果做对比,少数服从多数等。
- 战斗回放和观战:因为帧同步的服务端会记录每一帧的数据,所以做回放或观战的时候,只要把每帧的操作信息都执行一遍就可以了,天然支持。
- 断线重连:看断线多久,但是状态同步都可以秒进,帧同步需要追帧过程,所以快慢看离线了多久,可以补帧快速演算,或可以通过游戏机制如短时赛,如果10分钟一局就没必要在意离线过久的问题,因为很快结束,或者离线过久当逃跑处理。
离线6分钟,重连1分钟,我们现在的耗时,如果只是网络波动,那追帧秒恢复的。 - 表现一致性:核心其实就是保证所有客户端的表现一致性,公平的竞技体验,状态同步对结果一致性要求不高,就比如你看到的敌人位置其实是服务端上一个时间间隔的位置,经过网络传输,延迟是客观存在的,所以此时你打的位置可能敌人已经走动不在原处,可能会打空,这就是表现不一致的问题,除非是指向性技能,或者服务端同步的更快也会导致消耗服务器性能,比如CSGO的服务器是128tick,而穿越火线是8tick听说升级到16tick了,这种情况有可能出现上述问题,如我躲进了建筑后面,但还是被打中了,那是因为服务端结算的时候你的位置还在之前的位置,而你客户端预演的位置已经到了建筑后面 。
而帧同步不存在这个问题,因为都是在客户端本地按帧执行命令计算,所有的客户端在同一个时间 + 相同的输入 = 得到相同的结果。
最后:其实帧同步和状态同步在很多时候是一个互补的存在,现在这个时代,很多商业游戏也都是两种技术同时运用在一个游戏里,取长补度。但是这种机制在MOBA 3D项目中会增加很多开发难度和运营成本,详细的可以看后面提供的友情链接。
在《英雄联盟手游》中,还依然是纯粹的帧同步,《王者荣耀》也是这样,后面赚大钱了,才实现的更好,比如他现在断线5分钟也可以秒进,大家可以试试,这都是要一个过程的来优化的,需要更多的服务器资源来辅助。
所以基于开发效率,网络传输效率,操作表现体验,我们也是像《王者荣耀》《英雄联盟手游》一样使用纯粹的帧同步。
关于帧同步提供以下3个友情链接深入研究学习。 - 1.《王者荣耀》技术总监复盘回炉历程:没跨过这三座大山,就是另一款MOBA霸占市场了
- 2.【网络游戏同步技术】帧同步的一致性
- 3.2 天做了个多人实时对战,200ms 延迟竟然也能丝滑流畅?
3.介绍项目结构
团队:4人,1个UI加原画,1个建模,2个全栈开发(1个精通客户端,1个精通服务端)
项目:前端使用CocosCreator3.8.2,后端使用java1.8 + netty + mysql + redis。
前后端使用protobuffer proto3语法,服务端同时提供HTTP/WebSocket/UDP支持JSON和二进制解析,目前在微信小游戏使用UDP。
目前登录注册匹配都归在大厅服进程,战斗服独立一个进程
客户端在大厅只跟大厅服连接,匹配成功后连接战斗服,断开大厅服,战斗结束后连接大厅服,断开战斗服。
客户端有AI,可以点自动战斗,电脑人也是AI自动战斗。
目录:
Art目录:
Doc目录:
Excel目录:
Tabels目录:
Proto目录:项目使用前先阅读/Src/Proto/README.docx
前端代码:
服务端大厅项目代码:
服务端战斗服代码:
windows开发用到的工具和Linux部署上线文档
游戏截图:
代码统计
后端代码统计
前端代码统计
素材版权
源码、美术资源均可商用
购买须知
本产品为付费虚拟商品,一经购买成功概不退款,请支付前谨慎确认购买内容。
联系作者
QQ:3306753685
微信:bcp199 或 Monkey_Games