带有客户端预测的RTS风格游戏

时间:2018-09-26 17:46:51

标签: unity3d networking game-development

因此,我目前正在从事类似RTS的多人游戏。单位不可被玩家控制(他们会自动攻击移动到某个位置)。

我决定不做全面研究,而是做一个基于状态/预测的混合体。在客户端上完全模拟了该游戏,并为每个单位每秒分发一次的状态数据包(位置,运行状况等)。我已经读到,这是近来做事的一种很常见的方法,但是我遇到了重大问题。健康同步是一个明显的问题。损坏在每台客户端计算机上本地处理,并通过状态包进行纠正。这会导致与此类似的问题:

  • 弹丸击中客户端机器上的一个单位,使其生命值从100降低至50。
  • 然后,客户端仅从服务器接收到状态数​​据包,说他的健康状况为100,从而将其备份。

当然,稍后将其降到50时,他还会收到另一个纠正包,但这会导致非常严重的视觉尖峰。如果考虑到能力伤害之类的影响,这个问题会更加严重。

我是否完全误解了创建客户端预测的游戏所需的条件,还是只需要视情况逐个对待每个变量? (即,放入愚蠢的骇客,使健康状况看起来还不错)。

1 个答案:

答案 0 :(得分:0)

我将其发布在Game Dev上,因为它主要是“我该怎么办?”有点问题,但是在某些技术方面还是可以的。

关于您的问题,我要做的是:

不要让客户的预测模拟实际上对单元造成损害。

或者,如果这样做,则使损坏程度是实际损坏程度的1/4到1/10,并在视觉上显示值为Math.min(Math.max(sim_hp, 5%), last_packet_hp),该值可以防止跳升,但允许服务器向下校正(而客户的预测性损害则是最后值和当前值之间视觉上令人愉悦的“动画”。除非客户端在服务器上实际死亡,否则也不允许客户端将其HP降低到5%以下。玩家可以轻易地忽略此时可观察到的任何差异(因为玩家非常熟悉网络时滞和数据包丢失)。