マルチプレイヤーゲームの Client-Server 勉強ノート

2019-04-12   (Updated : 2020-10-16)

この文書は

リアルタイム・マルチプレイヤー・オンラインゲームの Client-Server を作る際の、 基礎知識・周辺技術・世の事例をまとめたノート。設計時に振り返る用。

基礎知識

用語 意味
Dedicated server ゲームの世界をシミュレートする専用サーバ。
データセンターやクラウドでホスティングされるサーバを指す
Listen server Client と同じプロセスで実行されるサーバ(Client ホスト)
Peer-to-Peer 各 Client どうしが直接通信するモデル。デメリットは色々あるが、
オブジェクトが多くプレイヤー数が少ないゲームには向く

NAT トラバーサル

モバイル回線

関連知識

情報源

書籍

一冊選べと言われたらこれ:

ゲームロジック実装の現場感を感じられる内容のものだと以下のあたり:

ややカジュアルだが全体観の参考になるものとして:

Web 上の記事

  • Client-side Prediction (クライアントサイド予測)
  • Entity Interpolation (エンティティ補間)
  • Lag Compensation (ラグ補償)

Web 上のスライド

フォーラム系

世の中の事例系

  • Nintendo has a peer-to-peer networking library called “pia”. They also have a matchmaking library called NEX. These libraries are used in many first-party games.

世のゲームの通信量

※ Web を日本語や英語で適当に検索して見かけた数字をもとにした数字感を示す

  • スプラトゥーン2 は 1 マッチ 10 〜 15 MB と結構大きめ
  • Brawl Stars は 3 分のマッチで 3 MBとか、1 時間遊んでたら 15 〜 30 MB とか

SaaS / 通信ミドルウェア

Photon

この手のやつでよく使われている印象のあるメジャーどころ。

UNET (Unity Multiplayer)

Unity 5.1 (2015-06) の時に用意された Unity 公式のネットワークライブラリ。 リレーサーバ形式。ホストマイグレーションができなかったり、品質面だったりであまり評判は良くなかった模様。

2018 年時点で 廃止予定 であることが発表されているため、今後の新規開発では選択肢に入らないだろう。

Unity 公式の今後のネットワーク機能

Google と提携し、今後は Client-Server 型の新しいネットワーク機能を提供していく展望の様子。

モノビットエンジン

国内産の通信ミドルウェアではモノビット社のエンジンもよく使われている。

採用事例:

  • ブレイブフロンティア、LORD of VERMILION ARENA、城とドラゴン、コトダマンなど

MagicOnion

ちょっと毛色が違うが gRPC 上で双方向通信を実現するフレームワークもある:

ネットワークモデル

オンラインゲーム開発において主要なネットワーク構成 / ネットワークトポロジをまとめる。

P2P (Peer-to-Peer)

Peer-to-Peer

Peer-to-Peer

  • 端末同士が直接通信する形式
    • インターネット経由の通信の場合、大抵のケースで NAT 越え が必要になる
  • スター型は 1 台の端末が Host となり、Guest は Host だけに接続する形式
    • Listen Server 方式とも言う。また、Host を Listen peerSuper peer と呼んだりもする
  • フルメッシュ型は互いに座標情報などを送り合う形式
    • 全体の通信量が無駄に増え、同時プレイの最大人数に制約がかかる
  • チート耐性が無い
  • サーバが無いため、運営側にとってはサーバ代がかからないという経済的なメリットがある
    • このためインディーズゲームなどでは採用されやすい
  • 1 vs 1 の格闘ゲームのような、人数が少なく同期性が重視されるゲームに向く
    • 複数人の同時プレイゲームでは、各プレイヤーの同期だったり通信の安定性を確保するのが難しくなる

Client-Server モデル

Client-Server モデル

Client-Server モデル

  • 通信にサーバを挟む形式
  • クライアントホスト型は、リレーサーバを置いてパケットを中継する
    • リレーサーバで NAT 越えを解決したスター型の P2P (Listen Server)ともみなせる
    • ゲームロジックの処理は Host Client が行う
    • P2P と同様にチート耐性が低い
    • Host に負荷が集中するため同時プレイの最大人数に制約がかかる
  • 専用サーバ型は、ゲームロジックの処理をサーバ側で行う
    • チート耐性がある
    • 通信 / ゲームの継続可能性を安定させやすい
    • サーバの運用・開発コストは最も高くなる