高速ゲームのマルチプレイヤー(パートIV:ヘッドショット!時間の旅)


  1. パートI、II(独裁的なサーバーを持つシングルプレーヤー)
  2. パートIII(敵の出現)
  3. パートIV(ヘッドショット!)

2秒のPingがある場合に完璧なヘッドショットをかける方法は? この記事で学習します。

現在のマルチプレイヤーアルゴリズム



これは通常は正常に機能しますが、高い空間時間精度を必要とするイベントにとっては大きな問題になります。 たとえば、敵の頭を粉砕したい場合!

遅れ補償


そのため、狙撃ライフルを敵の頭に向けることができました。 トリガーを静かに引いて息を吐きました。 あなたは自分の能力に自信があり、見逃せません。

しかし、あなたは逃した!

なぜこれが起こったのですか? これはどのように起こりましたか?

実際、私たちが構築したアーキテクチャでは、敵の頭が射撃の時点ではなく、射撃の100ミリ秒前の場所を狙っています!



それは、光の速度が非常に小さく、ほんのわずかな世界での狙撃兵のようなものです。 あなたは相手を目指しますが、光があなたに届くまでに、彼は長い間彼の古い位置から消えていました。

神に感謝します。この問題にはかなり簡単な解決策があります。これはほとんどの場合、他のプレイヤーにも受け入れられます(1つの例外については後で説明します)。

仕組みは次のとおりです。

そして誰もが幸せです!



サーバーであるため、サーバーは満足しています。 彼はいつも正しいので、彼はいつも幸せです。
射手は、敵の頭を狙い、1回の正確な射撃でそれを打ち破ったので幸せです。
不幸なのは死者だけです。 彼がショットの時点でじっと立っていたら、彼自身が責任を負うことになっていた。 彼が走った場合、あなたは良いシューティングゲームです。
しかし、彼が危険地帯を走り抜け、一瞬後に彼が安全だと思ったときに射殺された場合はどうでしょうか? 彼は怒ってしまいます。



これは起こる可能性があります。 これは、私たちがしなければならない妥協です。 射手は過去に彼を撃ったので、プレーヤーはすでに彼が角の後ろに隠れた後に撃たれることができます。

これは不誠実に聞こえますが、シューターの視点から、このプレイヤーはプレイヤーの視点からと同じ時間だけ広場を走ったことを覚えています。 唯一の違いは遅延です。

正確なショットが機能しなかった場合、さらに悪化します!

不条理のポイントに持ち込む


この方法は、巨大なpingでも機能することに注意することが重要です。
注意、トリックは専門家によって行われます! 本番サーバーではこのトリックを実行しないでください! 処方箋が2秒のチームは、実際に実行する必要はありません。



おわりに


マルチプレイヤーのようなものを正しく実行することは困難ですが、説明した概念を理解して武装していれば、実装するのに複雑なことはありません。

さらに読むための資料(英語):
ゲームのガファー
バルブのレイテンシ補正方法

翻訳者から
これで、 Gabriel Gambettaによる一連の記事が終了します。
しかし、私はあなたに別れを告げません。 ゲームワールドのシリアル化を構築する方法についての記事を執筆する予定です。実際、マルチプレイヤーなどの興味深いトピックの研究がどこにつながるかはわかりません。

UPD


krimtsevは非常に合理的な質問をしました。
FPSとPINGはこれがどのように影響するかを理解していますが、TICKRATEはどうですか?

答えます。 Bogotoffは、1秒あたり10回のサーバーリフレッシュレートでプレイするのは不便に思えたため、説明したアルゴリズムから離れること許可しました。

クライアントで補間を使用して敵の位置を表示するため、実際にはプレイヤーがいくつかの2つの状態の間にある敵を撃っていたため、クライアントがレンダリングしたとされるサーバーの特定の状態を適用することは完全に正しいとは言えません。
遅延補正メカニズムを適用しているため、ショットが発生した世界の2つの状態を検出し、それらを補間するために使用できます。
したがって、毎秒1回サーバーを更新しても、適切に撮影できます。



もちろん、このサーバーの頻度でのゲームはひどいように見えます。 そうしないでください。 また、一般にFPSをできるだけ高く保ちます。 ゲームワールドのサンプリング周波数が高いほど、プレーヤーの高品質なゲーム体験が得られます。 私の個人的な私見は60以上ですが、もはや意味がありません。

Source: https://habr.com/ru/post/J303006/


All Articles