站内搜索

搜索

手游源码-游戏源码-棋牌源码资源网-亲测源码-游戏搭建-破解游戏-网站源码-qq技术

100金币/天 购买
100金币/天 购买
100金币/天 购买

观察|腾讯游戏开发者训练营—腾讯如何打造实时对战手游

14

主题

14

帖子

2

金币

红钻会员

Rank: 2

积分
70
发表于 2022-5-11 07:09:19 | 显示全部楼层 |阅读模式
最近公众号暂停了一段时间,因为忙于全球手游大会腾讯游戏服务展台,我负责演讲:腾讯游戏开发者训练营——腾讯如何创造实时对战手游。这次推送就是这次GMGC演讲的内容。

自 2015 年以来,市场对手游的偏好逐渐从早期的休闲和卡牌游戏转向更严肃、更易操作的游戏玩法。因此,即时对战的游戏形式逐渐成为手游畅销榜上的普遍特色。 《王者荣耀》、《热血传奇》、《火影忍者》、《穿越火线手游》、《六龙》等收入前十的游戏,均支持玩家实时PK或合作研究。这些游戏中的玩家由于具有较强的互动玩法,具有较高的活跃度和社交强度,为游戏收益的提升奠定了坚实的基础。同时,由于实时战斗的玩法深度和交互强度远高于休闲游戏,用户的忠诚度也更高,游戏的生命周期也变得更长。

腾讯游戏开发团队很早就看到了实时对战这一重要趋势,因此在自研产品方面,加大了对这类玩法的开发力度。诞生了《王者荣耀》、《国超神》、《穿越火线手游》、《全面突击》、《天天玄斗》等一大批优秀作品。早期的《国机大战》还加入了实时双打的功能。这些具有实时战斗玩法的游戏一般具有较高的用户活跃度。其中,《王者荣耀》的DAU一度突破1000万。既然实时战斗玩法是一个非常重要的功能,为什么我们现在看到的这种玩法的游戏还是不多呢?其中一个重要原因是实时战斗功能的开发存在一定的技术门槛。本文希望向大家展示腾讯是如何跨越这些门槛,解决实时对战游戏开发中的一系列技术难题的。

实时对战游戏开发的技术难点主要有三个方面:一是版本兼容性问题。众所周知,如果不同版本的程序通过网络进行通信交互,很容易出现问题。对于手机端的游戏客户端,往往难以推送用户更新,导致大量不同历史版本同时运行。解决这个问题可以为大量用户一起玩提供基础。第二个方面是游戏状态同步的问题。由于多个玩家实时一起战斗,游戏程序必须保证玩家的客户端显示相同的效果,否则很难提供公平的游戏机制,保证玩家的游戏体验。实时同步游戏状态需要转发大量数据包,与回合制同步数据量不在一个数量级。然而,手机游戏的网络环境极其复杂。 2G、3G、4G、WIFI共存。这些网络的延迟是不同的,更糟糕​​的是手机会在这些网络之间切换,底层网络连接经常会断开或者丢失,这是以前的PC游戏没有遇到过的问题。第三个方面是服务器稳定性的挑战。

由于实时对战游戏需要转发大量消息,大部分游戏还需要在服务器上运行各种游戏逻辑,如奖励、AI、验证等程序,导致服务器负载极高服务器。面对海量计算需求,实时游戏对计算延迟也非常敏感,要求服务器在极短的时间内做出响应。这对服务器性能和稳定性提出了巨大挑战。针对这三个挑战,腾讯游戏结合其在PC端游戏时代的技术经验和在手游环境下的努力探索,总结出一系列切实可行的解决方案。

首先,我们来谈谈网络同步。这是即时对战手游中最难的技术问题,也是对用户体验影响最大的部分。经过测试,我们可以发现2G网络的延迟在400ms左右,而3G/4G/WIFI的平均延迟分别是100ms、50ms、30ms。由于手机可能会在延迟差异如此之大的网络之间切换,我们不能简单地将一定的网络延迟作为解决方案设计的唯一重点。另外,移动网络质量不稳定,网络速度变化非常频繁,这也让我们需要注意不要仅仅依靠网络本身的质量来保证体验。在非WIFI条件下,很多移动网络都是按流量收费的,这也是需要考虑的问题。手机在网络之间切换会导致底层网络断开、地址变化等问题,这些都是常见的情况。在设计网络同步程序时必须考虑到上述问题。要统一解决这些问题,最重要的是选择合理的游戏状态同步模型。在同步模型中考虑到各种需求,而不是只顾头和脚,是解决实时同步问题的最基本方法。

游戏同步方案



腾讯在大量游戏开发的实践中总结出三种游戏同步模型:

第一种叫做MMOG模式。这种同步模型在电脑游戏时代已经被广泛使用,尤其是在游戏内部。它的主要实现点是:服务器负责计算所有的游戏逻辑并广播这些计算的结果;客户端只负责发送玩家的动作并显示收到的游戏结果。

一般来说,玩家向服务器发送一个操作,服务器根据玩家的操作修改内存中的游戏世界模型,计算游戏世界对该操作的响应,并将这些响应广播给多个相关客户端。每个客户端负责将这些数据呈现给玩家。这种方法的优点是非常安全。由于整个游戏逻辑都在服务器上,客户端可以作弊的范围很小。服务器只接受合法的玩家操作,一切按照既定逻辑计算。另一个好处是游戏的逻辑更新非常方便,因为主要逻辑在服务器端,一般的玩法挑战,游戏开发团队可以自行更新重启服务器,不需要百万手机下载更新包。

但这种方法的缺点也很明显。首先,用户的体验非常依赖网络的质量。如果一个用户的网速很慢,其他玩家会发现他在游戏中明显变了。因此,网络延迟一般要求在100毫秒以内,基本的流畅性可以得到保证。另一个缺点是服务器负责太多的游戏逻辑操作,尤其是动作类游戏,服务器往往需要在二维或三维空间进行操作,导致服务器负载非常高。

最后,如果使用这种同步方案,网络通信中的数据量可能会非常大,因为每个游戏性能都必须以数据包的形式发送给客户端。如果一起玩的用户数量很大,这个广播的数据包量会很大。大量的数据包除了占用带宽之外,除了会增加延迟和丢包外,还可能给用户带来很大的流量成本。因此,基于以上特点,腾讯一般在同款游戏中玩家数量较少,但强调玩法变化快、安全性高的游戏中采用这种同步方案。由于腾讯在端游中大量使用该方案,且具有一定的技术积累,因此也会影响该方案在更多游戏中的使用。腾讯自研手游中比较有名的《穿越火线手游》、《国超神》、《玄斗之王》都采用了这种方案。



第二个选项称为主机模式。这种同步方案的做法是将参与战斗的一个客户端作为“主”,将其他客户端作为“从”。游戏逻辑的主要操作由“主机”完成,所有“辅机”通过服务器中继操作指令,集中发送给“主机”;在“宿主”完成游戏操作后,结果指令通过服务器转发并广播给“宿主”。所有的“辅助”。

这个方案看起来有点奇怪,但是优势很明显:首先,大量的实时动作游戏,游戏流程的逻辑代码,都是在客户端开发和运行的。客户端的游戏引擎对2D和3D空间的位置计算和碰撞检测功能有很好的支持。因此,客户端负责整个游戏逻辑,这样服务器端就不需要开发这部分功能,也大大降低了服务器端的复杂度。因为服务器只负责转发和广播,所以它可以承载的人数与第一种解决方案相差几个数量级。另外,因为“宿主”客户端运行游戏逻辑,所以它的体验是最好的。即便有的“备机”因为网络延迟和丢包导致体验降低,但对于“主机”来说,只是发现“备机”有点慢。就是这样。

在一些特定的玩法下,比如“双打”的动作游戏,“宿主”的计算量也很小,完全可以多承担一台副机。如果实时战斗以PVE为主,用户更关心的是自己的体验,所以不太在意同伴的精准动作。只要同伴能帮忙,他们就会感到满足。这种控制台模式在PVE和少数玩家一起玩的情况下是一个很好的同步解决方案。它还可以在 400ms 延迟下提供良好的游戏体验,这是其他解决方案难以实现的。当然,这个方案也需要大量的网络带宽和流量,和第一个MMOG方案基本一样。腾讯的《国机大战》双打模式就是用这个方法,效果相当不错。

第三种方案称为帧同步模式,也称为“锁步模式”。这种模式使用图像隐喻,将所有参与战斗的客户视为排成一排的囚犯。这些囚犯的左脚都被铁链锁在了一起,想要往前走,只能同时迈步。如果其中一个人走得更快或更慢,整个团队都会停下来。在实现上,服务器一般以固定的帧率采集每个客户端的收益,然后将这些输入广播给所有客户端;由于每条操作指令到达所有客户端的时间(帧)是相同的,所以每条客户端操作的结果是相同的,相同的输入会得到相同的结果,就像其他玩家通过摇杆连接到您的手机一样网络。

这种同步方案是传统单机局域网游戏中最常用的,比如大家熟悉的星际争霸。这种同步模型最大的优势就是一致性强,每个客户端的性能完全一致,非常适合对操作技巧要求较高的游戏。而且,由于只有玩家的操作在网络上广播,数据量非常小。无论游戏中的角色数量和状态多么庞大或复杂,都不会影响播放数据量。在手机网络下,更少的数据包带来更低的流量成本和更好的网络性能。



但是这个方案也有一个很大的缺点,就是对所有王的延迟都有要求,一般在50毫秒以内。如果有客户端网卡,所有客户端都必须停下来等待。当你在玩星际争霸时,你会看到一个家庭断线,每个人的游戏都被暂停。腾讯游戏中的《王者荣耀》和《全民突击》竞争非常激烈,所以采用了这个方案。

玩家实时交流

在传统的 PC 游戏中,玩家在游戏过程中经常通过键盘输入进行交流。后来,一些语音聊天软件,比如YY,在游戏中充当了实时交流的工具。在实时对战游戏中天外神坛,与队友的合作往往是游戏乐趣的重要来源,所以实时交流非常重要。所谓“开黑”,是指一队沟通良好的游戏伙伴,一起与其他玩家对战手游对战平台,顺畅的沟通能够为玩家带来巨大的竞争优势。不过在手游中,屏幕一般都比较小,没有玩家打字的空间,在如此激烈的即时战斗中也没有时间慢慢打字。所以很多人自然会想到运行一些实时聊天语音软件来辅助游戏交流,就像在PC上一样。但是,与手机操作系统不同的是,手机上运行的后台软件除了严重降低手机性能外,还可能被操作系统挂起和关闭。所以游戏+语音工具的方式是行不通的。此时需要游戏开发团队直接为游戏中的玩家提供实时语音服务。

由于腾讯率先大规模进入实时战场,很早就发现了语音的需求。因此,我们首先开始在游戏中集成语音服务。除了实时聊天功能外,还提供语音转文字、语音留言等多种功能,让玩家在手机上进行实时流畅的交流。随着实时对战规模的不断扩大,腾讯也实现了多达10万人的语音聊天室。如此大规模的聊天室依赖于语音服务的低码率、低功耗、低崩溃等特点。现在除了游戏领域,其他领域,如体育视频广播和在线教育,也开始使用这种游戏生成的语音服务。

从游戏语音服务的市场效应来看,腾讯大力发展这项服务是非常值得的。因为我们计算过,在MOBA游戏中,30%的玩家会主动说话,单场游戏中每位玩家的发声会超过30秒,使用过该语言的玩家累计超过85%——这些数据表明语音服务是一场实时战斗。游戏必备功能。因此,腾讯在所有 32 款对战游戏中都加入了语音服务。



版本更新问题

手游版本更新问题由来已久。大家都知道,要推动用户升级手机上的程序并不容易。由于手机内存小,更新过程容易死机;移动设备的网络很不稳定,经常下载到一半,用户走出wifi范围或进入电梯,网络中断。 iOS版本审核也是个大问题。审查何时通过通常是不可预测的。对于紧急虫子,远水救不了近火。但由于实时对战游戏强调竞技性,游戏逻辑往往需要调整和优化;而实时对战玩法的内容需要不断更新,所以很多程序经常需要更新。现有条件下,单纯的按部就班发布版本,估计玩家已经跑路了。

我们发现如果我们在游戏中更新资源,成功率可以达到9%以上9.5%。但是,如果要发布软件包版本的更新,成功率往往会下降到 90% 以下。所以每发布一个版本,在线人数几乎下降了10%,这对游戏运营来说是一个巨大而持久的损失。所以我们想,能不能更新程序版本,变成游戏资源更新呢?答案是肯定的,只要将程序代码写成脚本,然后用优秀的脚本解析器运行,程序代码就可以以文本资源的形式更新和下载,比如图片、声音等游戏资源。所以我们开发了xLua执行库,可以在引擎中运行lua脚本,执行效率非常高,并且可以在脚本中无缝调用游戏引擎的API。这样我们就可以尽可能少地发布新的程序版本,并且大部分的游戏内容和玩法调整都是使用lua脚本更新来实现的。由于更新游戏采用的资源更新方式,腾讯目前的程序更新率已达到99.8%左右。

身份验证问题

游戏的外挂和破解一直是国内游戏市场的老大难问题。在实时对战游戏中,这种破坏性的程序会创造出各种花样。比如有穿墙加速的插件手游对战平台,也有通过协议破解奖励的代理,自动机器人反复刷战等。在这方面,我们从游戏的内部结构上,为打击这些破坏游戏的行为付出了很多努力。常用的方法有四种:

一个是服务器驱动程序。在传统的客户端游戏项目中,大部分游戏逻辑都由服务器控制,因此外挂攻击的空间较小。在实时对战的同步模式中,服务器驱动的MMOG模式也是对抗作弊者的最佳方式。由于该方案的逻辑都是在服务器上计算的,所以插件很难从游戏逻辑中得到任何好处,只能想办法降低玩家操作的难度。但是,这种服务器驱动的解决方案也很昂贵。服务器需要保存整个游戏世界的模型,计算所有的AI逻辑,消耗服务器上大量的硬件资源,增加了服务器架构的复杂度和维护难度。 这种模式也降低了玩家的实时体验,因为总是要等待服务器的结果。

二是抽查回放。这种方式是第一种服务器驱动方案的简化,也就是说客户端还是会上传所有的游戏操作,但是服务器并不完全计算整个战斗逻辑,只计算容易被外挂攻击的部分为了验证,这种方法只允许在服务器上保留世界模型的一部分,从而减少了服务器的计算负荷。更重要的是,客户端不需要等待服务器的命令回复,可以先按照自己的逻辑运行,体验上会有更好的表现。如果服务器发现作弊,它将惩罚相关帐户。这种做法其实是有漏洞的,因为那些没有经过抽查的客户端,或者没有经过验证的逻辑,可能是插件攻击的漏洞,但是付出这个代价之后,得到的只是服务器性能消耗和体验好处。

第三种是灵活的反插件。这种方式的验证比较简单,服务器上只保存了一批预设的验证规则。这些规则可能仅用于计算玩家的收入和支付是否合理,以及一些关键操作是否符合规则。这种方案对服务器的压力很轻,玩家的体验会很好,因为验证过程大大加快,验证位置往往会降低到玩家受益的时候。但是,这种方法有更多的漏洞。一旦插件熟悉了这些预设的验证规则,就很容易进行针对性的攻击,而且这种对抗可能会持续很长时间。

第四是报告制度。这种方式简直就是一场人民战争,让玩家发起举报请求,然后服务器收集被举报人的行为证据,进行有针对性的核查和处罚。这种人民和官员的无知,很容易被有意识地相互刷刷利用。但从对抗的角度来看,动员玩家一起做验证报告,其实是对程序运行机制的一种延伸。该方案有一定的漏报概率,因此常被用作其他几种验证机制的备用机制。

以上四种在腾讯的游戏中经常结合使用。在实时对战游戏中,除了注重验证的准确性,我们还需要平衡游戏体验。因此,很多地方往往需要妥协,但只要我们有足够的手段一起使用,真正落网的鱼很少。

实时对战游戏的开发一般需要大量的技术开发工作。除了上面提到的关键问题,还有很多其他的技术问题需要解决。腾讯自研游戏普遍使用大量历史积累的基础服务、框架和组件。这些久经考验的基础服务可以大大减少游戏的开发工作量,提供稳定的技术支持。为了让所有游戏开发者都能享受到腾讯工作室使用的这些优秀的基础服务,腾讯IEG研发部将这些基础框架和服务整合到“腾讯游戏服务”中,向业界公开共享。这些服务分为“接入服务”、“逻辑服务”、“数据服务”和“运营平台”四大类,分别解决了游戏开发中的大量常见问题。

感谢您的阅读,如果您觉得这篇文章对您有一点影响,请动动手指转发或分享到您的朋友圈。如有不同意见,请后台留言讨论。
【天外神坛】免责声明及帮助
1.重要:如果遇到隐藏内容回复后显示为代码状态,直接刷新一下页面即可解决此问题。
2.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
3.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4.如果本站有侵犯、不妥之处的资源,请在网站右边客服联系我们。将会第一时间解决!
5.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
6.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

老群被封加此新群不迷路。
上个主题 下个主题 快速回复 返回列表 客服中心 搜索 QQ加群
上个主题 下个主题 快速回复 返回列表 客服中心 搜索 QQ加群

QQ|Archiver|小黑屋|天外神坛

湘ICP备2021015333号

Powered by 天外神坛 X3.4 © 2020-2022 天外神坛