Choose your operating system:
Windows
macOS
Linux
UE4 のマルチプレイヤーはクライアント-サーバーモデルに基づいています。つまり、接続中のクライアントが近似値を保持し、1 つのサーバーだけがゲームステートの権限を持つことを意味します。
サーバーは UE4 マルチプレイヤーで重要な役割を果たします。重要な決定をすべて下し、正式なステートをすべて格納、クライアントとの接続を処理、新規マップへの移動、マッチを開始するためのゲームプレイフロー全体を処理、マッチの終了など、サーバーにはさまざまな役割があります。
サーバーの起動
基本的なコマンドライン (これらのコマンドはエディタを使用するため、クックしたデータは必要ありません)。
タイプ |
コマンド |
---|---|
Listen サーバー |
|
Dedicated サーバー |
|
クライアント |
|
Dedicated サーバーにはデフォルトでヘッダ情報がありません。「-log」を使用しないと、専用サーバーを表すウィンドウは表示されません。
サーバーによるゲームプレイ フロー
サーバーはゲームプレイ フローの操作を担当します。アクタのレプリケーション更新などの情報と一緒に、ゲームプレイが開始/終了すると、クライアントにマップへ移動するタイミングを伝えるのはサーバーの仕事です。
フレームワークの主要部分 のほとんどはこのドキュメントの対象外ですが、特定クラスを作業する時に導入するマルチプレイヤーの付加的なニュアンスについて触れていきましょう。
ゲームプレイ ステートとフローは一般的に
GameMode
アクタで操作します。サーバーだけがこのアクタの正確なコピーを格納します (クライアントはコピーを一切格納しません)。このステートをクライアントへ伝達するには GameState アクタ
を使用します。このアクタは GameMode アクタの重要なステートをシャドーイングします。GameState アクタは、それぞれのクライアントにレプリケートするためにマークが付けられます。クライアントはこの
GameState` アクタの近似コピーを格納して、ゲームの全体的なステートを知るためにこのアクタをリファレンスとして使用します。
GameMode に関する詳説は、「 GameMode のマニュアル 」を参照してください。
接続の手順
ネットワークにある限り、サーバーは何かするためにクライアントとの接続が必要になります。
新規クライアントが初めてサーバーと接続すると、以下のことが起こります。まずクライアントがサーバーへ接続リクエストを送信します。サーバーはこのリクエストを処理して、接続を拒否しない場合、処理を行う適切な情報をつけてクライアントにレスポンスを送信します。
主な手順は以下の通りです。
-
クライアントは接続リクエストを送信します。
-
サーバーがリクエストを許可すると、クライアントへ現行マップを送信します。
-
サーバーはクライアントがこのマップをロードし終わるまで待ちます。
-
マップがロードされると、サーバーはローカルで AGameModeBase::PreLogin を呼び出します。
-
GameMode はここで接続を拒否することができます。
-
-
接続が許可されると、サーバーは AGameModeBase::Login を呼び出します。
-
この関数は PlayerController を作成する役割があります。作成後は、新しく接続したクライアントにこれをレプリケートします。レプリケートを受け取ると、この PlayerController をクライアントの一時的な PlayerController と置換します。一時的なコントローラーとは、接続をプロセス中にプレースホルダ―として使用したものです。
-
APlayerController::BeginPlay はここで呼び出されることに留意してください。このアクタに RPC を呼び出すのはこの時点でもまだ安全ではありません。AGameModeBase::PostLogin が呼び出されるまで待ってください。
-
-
これまでの手順を問題なくすべて実行したと仮定すると、ここで AGameModeBase::PostLogin が呼び出されます。
-
サーバーはこの時点で RPC 関数をこの PlayerControlle 上に安全に呼び出すことができます。
-