多人物理网络


12

我很好奇赛车游戏中如何实现具有物理功能的多人网络。我们拥有一个物理世界,其中有多个由不同人员控制的快速行驶的车辆。假设车辆拥有武器并且可以相互射击(扭曲金属,Vigilante v8)

我担心撞车和撞车。权威服务器还是更好的选择?

Answers:


5

通常,使用服务器来存储与客户端定期共享的“真实”状态。冲突在客户端和服务器中独立发生,客户端的状态使用以前称为“推算”的过程从以前的状态进行估算。当服务器状态到达客户端时,如果存在差异,客户端将执行从其当前状态到主要通过插值接收的状态的转换。

但是,对于许多对象而言,冲突可能是一个现实问题,因此通常要做的是将客户端的模拟时间保持在服务器的模拟时间之后,以允许各种其他程度的灵活性。 关于Valve的Source Engine网络代码的这篇文章颇具解释性。另外,如果您仍不确定要使用哪种网络中间件/库,建议您研究RakNet及其“ ReplicaManager3”组件


2

您可以做几件事。

  1. 您可以在服务器上集中所有物理对象,并将坐标与所有客户端上的玩家对象同步。这是最简单的方法,并且没有很多缺陷,但是它占用了大量资源,并且需要大量带宽。您可以通过仅将值发送到特定半径内的其他播放器的播放器来优化带宽使用。

  2. 您可以按照Neenster所说的做,并让服务器和客户端模拟物理,服务器每隔一段时间就会更正客户端。这意味着所有客户端都会为每个玩家计算自己的物理情况,并且您将在服务器上同步按键事件,以提供每个客户端上每个玩家的轨迹。可以说,服务器每隔5秒钟广播一次物理模拟,所有客户端都接受更改。这可能会产生轻微的偏移,这种偏移通常不会引起注意,但是在网络滞后和数据包丢失(高流量UDP不可避免)的情况下,您会注意到您的播放器和/或其他播放器在屏幕周围出现故障并迅速而断断续续地更改位置(是字?)。

  3. 您可以让每个客户计算自己的物理场并同步其坐标。这使得很难在客户端之间共享的对象上模拟物理。如果您想做任何令人眼花anything乱的事情,要实现它是一个相当复杂的概念,因为某些对象不一定属于任何客户端。

第一个可能是最简单的,应该可以让您拥有大约4-5名玩家,并且几乎没有滞后。它将要求每个匹配项都有自己的服务器。如果您要进行LAN匹配,这无疑是可行的方法。

第二个可能是最实用的,但是可能很难实现。在服务器上运行物理模拟也非常有用。如果您有集中式服务器,则可能需要将负载平衡到多台计算机上,也许允许一个服务器匹配10个,将新匹配项加载到具有最少匹配项的服务器上。

第三个绝对是服务器上压力最小的一个,如果您正在执行对等网络方案,则可能是最佳的解决方案。正如我提到的那样,同步播放器对象以外的对象可能很困难,因为这些对象也可以被其他客户端更改。

我无法告诉您要使用哪个游戏,因为我不知道您的游戏如何运作。我所能做的就是给你事实。如果您还有其他问题,请随时发表评论。


您建议让客户进行物理操作是可以接受的解决方案,但您与作弊无关。
cubuspl42

@ cubuspl42为了继续关注主题,我省略了细节。我认为OP可以进一步探索解决方案,以探索减轻作弊的潜在方法。
tsturzl

一种这样的方式是允许将每个客户提供的内容的偏差限制为阈值。例如,大多数客户说给定的对象位于位置5,8或6,9,但是一个对象报告的坐标为12,19,与该对象偏离其他客户的数量相比,该阈值可能会超出阈值。这仅是部分解决方案,但是大多数游戏仅提供部分解决方案来作弊,因此为什么它仍然会发生。这种解决方案并不意味着他们在作弊,而是意味着他们的位置需要得到纠正,并且会滞后于他们。
tsturzl

好吧,我有点不同意。某些类型的作弊是可以修复的,而某些则不能。例如,在我看来,如果一个人可以为有竞争力的在线射击游戏者进行Speedhack,那将是一个糟糕的游戏设计。或一些疯狂的骇客,可让您以Godmode和无限弹药在地图上飞来飞去(我相信这是在《孤岛危机1》中的某个时候发生的)。这些是可修复的,只需正确设计游戏即可。诸如wallhack之类的东西几乎是无法修复的(它将需要来自服务器的大量资源)。Aimbot实际上是无法修复的。您的解决方案3会增加这种最严重作弊的风险。
cubuspl42

@ cubuspl42我认为您缺少示例的概念。选项3可以完全避免您正在谈论的问题。通常,您将拥有一个共享速度的TCP,然后您可以轻松检查客户端之间的速度并达成共识,还可以通过一些简单的数学运算来确定UDP坐标是否合理(假设客户端具有同步时钟(可通过硬件时钟建立连接)。
tsturzl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.