我正在考虑制作一款网络游戏。我对此有点陌生,并且已经遇到了很多问题,试图为航位推算和网络延迟制定一个好的计划,所以我很想看到一些关于这个主题的优秀文献。我将描述我考虑过的方法。

最初,我只是将玩家的输入发送到服务器,在那里进行模拟,并将游戏状态的变化广播给所有玩家。这使得作弊变得困难,但在高延迟下,事情有点难以控制,因为你无法立即看到自己行为的结果。

这篇《伽摩经》文章 有一个解决方案可以节省带宽,并通过在客户端上进行模拟来使本地输入显得流畅,但它似乎将防作弊功能抛到了九霄云外。另外,我不知道当玩家开始操纵环境、推动岩石等时该怎么办。这些以前中立的对象将暂时成为客户端需要发送 PDU 的对象,或者可能是多个玩家同时发送的对象。谁的 PDU 会获胜?每个玩家什么时候会停止对物体进行双重跟踪(与航位推算版本进行比较)?天堂禁止两名选手参加相扑比赛(例如开始互相推动)。

这个 gamedev.net 位 显示 gamasutra 解决方案不充分,但描述了一种不同的方法,该方法并不能真正解决我的协作推石示例。我发现的大多数其他东西都是射手特有的。我很乐意看到一些更适合像 SNES Zelda 这样的游戏,但涉及更多物理/动量的东西。

  • 笔记:我在这里问的并不是物理模拟——其他库已经涵盖了这一点。只是在网络延迟的情况下使游戏流畅且反应灵敏的策略。
有帮助吗?

解决方案

看看 Valve 在 Source Engine 中是如何做的: http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

如果是第一人称射击游戏,您可能需要深入研究他们提到的一些主题,例如:预测、补偿和插值。

其他提示

我发现 这篇网络物理博客文章 作者:Glenn Fiedler,更重要的是它下面的回应/讨论,太棒了。虽然很长,但是很值得。

总之

每当在现代游戏物理模拟中接收到客户端输入时,服务器就无法跟上重复模拟(即。车辆或刚体动力学)。因此,服务器在服务器之前对所有客户端延迟+抖动(时间)进行排序,以便所有传入数据包在服务器需要它们之前以 JIT 形式进入。

他还概述了如何处理您所要求的所有权类型。他在 GDC 上展示的幻灯片非常棒!

关于作弊

费德勒先生本人(和其他人)表示,该算法的缺点是不太防作弊。这不是真的。该算法与传统的客户端/服务器预测一样容易或难以利用(请参阅有关传统客户端/服务器预测的文章) @CD桑切斯的回答).

绝对清楚:服务器不容易被欺骗,只是因为它及时接收到网络物理定位(而不是像传统预测那样晚了 x 毫秒)。客户端完全不受影响,因为它们都以与传统预测完全相同的延迟接收对手的位置信息。

无论您选择哪种算法,如果您要发布主要游戏,您都可能需要添加作弊保护。如果是的话,我建议添加加密 傀儡机器人 (例如 XOR 流密码 其中“密钥流是由伪随机数生成器生成的”)和针对破解的简单健全性检查。一些开发人员还实现算法来检查二进制文件是否完好(以降低破解风险)或确保用户没有运行调试器(以降低开发破解风险),但这些都更具争议性。

如果您只是制作一款较小的独立游戏,可能只有几千名玩家玩,那么在 1) 您需要它们之前,不要费心实施任何反作弊算法;或 2) 用户群增长。

我们已经实现了一个基于强制服务器和做出预测的远程玩家的多人贪吃蛇游戏。每 150 毫秒(在大多数情况下),服务器发回一条消息,其中包含每个远程玩家发送的所有合并动作。如果远程客户端的移动较晚到达服务器,他就会丢弃它们。客户端将重播最后一个动作。

在 XNA Creator's Club 网站上查看网络教育主题。它深入探讨了网络架构(点对点或客户端/服务器)、网络预测和其他一些内容(当然是在 XNA 的背景下)等主题。这可能会帮助您找到您正在寻找的答案。

http://creators.xna.com/education/catalog/?contenttype=0&devarea=19&sort=1

您可以尝试对所有客户端施加延迟,具体取决于该区域的平均延迟。这样,客户端就可以尝试解决延迟问题,并且大多数玩家都会有类似的感觉。

我当然不是建议你强制每个人延迟 500 毫秒,但延迟 50 毫秒的人可以延迟 150 毫秒(额外添加 100 毫秒),以便游戏看起来更流畅。

简而言之;如果你有 3 名玩家:

  • 约翰:30毫秒
  • 保罗:150毫秒
  • 艾米:80毫秒

例如,计算后,您不必将数据同时发送回客户端,而是考虑它们的延迟并开始在约翰之前发送给保罗和艾米。

但这种方法在极端延迟的情况下并不可行,在这种情况下,拨号连接或无线用户可能真的会给每个人带来麻烦。但这只是一个想法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top