こんにちは。プログラマーのIです。
最近は、Vtuberによるゲーム実況動画が賑わいを見せていますね。
某バトルロワイアルゲームのストリーマー大会も一大イベントへとなりました。
さて、今回はオンラインゲームの開発について少し書いてみようと思います。

ネットワークを介したゲーム情報の受け渡し方

遠く離れた友達とゲームをする場合
自分が何かアクションをした情報を相手に伝える、もしくは相手が
何かアクションした情報が自分に伝わらなければ、ゲームは進みません。

オンラインゲームでは、ネットワークを介してその情報を受け渡ししていきます。
そして、その手法には大まかに分けて以下の2つの方法があります。

完全同期型

それぞれのプレイヤーの状態が互いに一致していることを保証します。
情報が揃わない場合は、ゲームの画面を停止させて情報が揃うまで待ちます。
格闘ゲームやRTSゲームなどはこの同期方法を取っています。

 

非同期型

多人数でのゲームになっていくと、同期する情報量が多くなり完全同期型では対処しきれません。
そこで、ある程度のズレは許容してしまおうというのが非同期型です。
TPSやFPSなどはこの同期方法を取っています。

非同期型特有の問題と工夫

補間して動く

同期されたプレイヤーの位置をそのまま描画しようとすると、テレポートしているように見えてしまいます。(色付きの少年)
これは、ネットワーク同期頻度よりゲームの描画速度の方が早いために起こる問題で
足りない位置情報を補間してスムーズに移動しているように見せかけています。(灰色の軌跡)

 

予測して動く


スピード感のあるアクションゲームでは、「補間して動く」をしても情報が追いつかないことがあります。そこでさらに、位置履歴、速度や加速度、キー入力などの複合的な情報を加味して次の位置を予測します。(青色の軌跡)
そして、ゲームが進んで予測と実際の位置が異なっていた場合には、実際の位置になるように補正されます。

最後に

補間や予測移動は、非同期型ゲームの工夫のごく一部に過ぎません。他にもどのような工夫がされているか推測してみると楽しいかもしれません。

プログラマ定期勉強会なども開催し、技術交流が活発なトイロジックではオンラインゲームに限らず様々な技術に対して探求心がある方を募集しています。
ぜひ、興味が出てきたらエントリーしてみてください!