cf手游自动瞄准辅助 “端改手”怎么做?《穿越火线:枪战王者》客户端技术方案详解
本文节选自《2018腾讯移动游戏技术评审标准与实践案例》手册,由腾讯互娱专家工程师郭智介绍CF手游团队在移动端实现同步技术、移动FPS游戏手感方面的实践和经验,完整手册可于文末免费阅读和下载。
一项目背景
CF手游的团队有着相当丰富的FPS游戏制作经验,但是移动端开发经验相对匮乏。团队面对的挑战很大,我们需要在手机端完美还原CF十多个游戏模式,上百把枪械手感。
虽然我们有实时对战FPS游戏开发经验,但是手游网络质量很差,我们需要保证在高Ping值,高丢包率的弱网络环境下流畅同步,并且避免外挂的出现。CF端游用户量很大,手游也会是一个高在线的游戏。对于后台我们希望能大幅度地提高负载,节省成本。
二解决方案
1.移动端实时同步技术
1.1CF手游的C/S架构
CF手游是竞技向的手游,为了杜绝外挂,弱网络下有良好表现,注重游戏的时效性,最终选择基于C/S架构使用可靠UDP作为网络层的同步方案:
图CF手游网络架构
引擎层:Unity的物理引擎是Physx。为了保证两边物理算法一致,我们搭建了基于Physx的物理服务器,并对其作出优化,同时集成了Recast Navigation等高性能引擎组件为服务器提供基础功能。
数据层:基于我们的关卡工具导出碰撞模型和关卡数据提供给服务器,保证数据一致。
游戏逻辑层:客户端使用C#编写,服务器为了高性能使用C++,保证核心运算一致。客户端和服务器都会维护一致的逻辑实体,两边都做移动计算,服务器会在同样的位置进行命中伤害计算,并且通知客户端做表现。服务器永远是权威,客户端是哑终端,借此达到高强度的反外挂。
整体C/S架构基于我们实现的UDP网络层进行快速传输。
1.2高性能的Dedicated Server与服务器负载优化
图CF手游服务器物理世界还原
CFM的即时对战服务端(DS)是依赖虚幻3引擎开发过程中积累的经验,完全为手游重写的。DS基于PhysX和Recast开源组件开发辅助论坛,对程序性能有良好的控制。在腾讯标准M1机型配置下,单机综合承载可以达到8000人。DS反外挂强度接近端游,单机性能比同类端游提高7-8倍。
1.3高时效的UDP网络层
游戏对网络有实时性要求高,带宽要求小的特点。TCP虽然提供了可靠传输,但是内置的复杂拥塞控制算法并不是专为实时性优化的,也没有提供较好的方法让业务定制化。CF手游实现了自定义的RUDP协议方案,使用UDP保证协议实时性,同时通过自定义重传策略兼顾可靠性,取得了很好效果,主要技术要点包括:
数据传输分类
CF手游中并非所有数据都要求可靠,按游戏逻辑需要,只有不到50%的协议有可靠性需求,RUDP中只对这部分协议提供可靠性保证。而非可靠包则保证尽快到达,以满足游戏的实时性需求。对玩家移动状态等信息,由业务层定时冗余重传。
图CF手游网络数据传输分类
客户端与服务器的交互时序如下:
图CF手游网络数据交互时序
快速发送
发送方不维护发送窗口,不等待前面包是否ack,有数据需要发送时立即发送。
快速重传
CF手游使用比TCP更高精度,响应速度更快的重传策略以保证实时性。
表RUDP快速重传策略
带宽优化
主要思路是有损服务和降低不必要开销。CFM持续进行了多轮流量优化,包括:
1.MTU设计为500+字节,应用逻辑保证数据包大小不超过MTU,避免拆包。
2.减小包头,8字节。
3.小包合并。同一帧发往同一个目标的多个小数据包合并为大包,减少包数量。
4.降低服务端帧率和位置精度,但不影响玩家体验。
1.4弱网络移动同步方案
PVP实时玩家同步
CFM采用C/S架构,服务器上会执行完整的游戏逻辑。在移动同步上,玩家的位置也是以服务器的位置为准,客户端1P视角和3P视角分别进行同步和模拟。