Client-Server モデル

マルチプレイヤーゲームにおけるサーバーの役割

Windows
MacOS
Linux

UE4 のマルチプレイヤーはクライアント-サーバーモデルに基づいています。これは、接続中のクライアントが近似値を保持し、1 つのサーバーだけがゲームステートの権限を持つことを意味します。

サーバーは UE4 マルチプレイヤーで重要な役割を果たします。重要な決定をすべて下し、正式なステートをすべて格納、クライアントとの接続を処理、新規マップへの移動、マッチを開始するためのゲームプレイフロー全体を処理、マッチの終了など、サーバーにはさまざまな役割があります。

サーバーの起動

基本的なコマンドライン (これらのコマンドはエディタを使用するため、クックしたデータは必要ありません)。

タイプ

コマンド

Listen サーバー

UE4Editor.exe ProjectName MapName?Listen -game

Dedicated サーバー

UE4Editor.exe ProjectName MapName server game -log

クライアント

UE4Editor.exe ProjectName ServerIP -game

Dedicated サーバーにはデフォルトでヘッダ情報がありません。「-log」を使用しないと、専用サーバーを表すウィンドウは表示されません。

サーバーによるゲームプレイ フロー

サーバーはゲームプレイ フローの操作を担当します。アクタのレプリケーション更新などの情報と一緒に、ゲームプレイが開始/終了すると、クライアントにマップへ移動するタイミングを伝えるのはサーバーの仕事です。

フレームワークの主要部分 のほとんどはこのドキュメントの対象外ですが、特定クラスを作業する時に導入するマルチプレイヤーの付加的なニュアンスについて触れていきましょう。

ゲームプレイ ステートとフローは一般的に GameMode アクタで操作します。サーバーだけがこのアクタの正確なコピーを格納します (クライアントはコピーを一切格納しません)。このステートをクライアントへ伝達するには GameState アクタ を使用します。このアクタは GameMode アクタの重要なステートをシャドーイングします。GameState アクタは、それぞれのクライアントにレプリケートするためにマークが付けられます。クライアントはこの GameState` アクタの近似コピーを格納して、ゲームの全体的なステートを知るためにこのアクタをリファレンスとして使用します。

GameMode に関する詳説は、GameMode のマニュアル を参照してください。

接続の手順

ネットワークにある限り、サーバーは何かするためにクライアントとの接続が必要になります!

新規クライアントが初めてサーバーと接続すると、以下のことが起こります。まずクライアントがサーバーへ接続リクエストを送信します。サーバーはこのリクエストを処理して、接続を拒否しない場合、処理を行う適切な情報をつけてクライアントにレスポンスを送信します。

主な手順は以下の通りです。

  1. クライアントは接続リクエストを送信します

  2. サーバーがリクエストを許可すると、クライアントへ現行マップを送信します。

  3. サーバーはクライアントがこのマップをロードし終わるまで待ちます。

  4. マップがロードされると、サーバーはローカルで AGameModeBase::PreLogin を呼び出します。

    • GameMode はここで接続を拒否することができます。

  5. 接続が許可されると、サーバーは AGameModeBase::Logi を呼び出します。

    • この関数は PlayerController を作成する役割があります。作成後は、新しく接続したクライアントにこれをレプリケートします。レプリケートを受け取ると、この PlayerController をクライアントの一時的な PlayerController と置換します。一時的なコントローラーとは、接続をプロセス中にプレースホルダ―として使用したものです。

    • APlayerController::BeginPlay はここで呼び出されることに留意してください。このアクタに RPC を呼び出すのはこの時点でもまだ安全ではありません。AGameModeBase::PostLogin が呼び出されるまで待ってください。

  6. これまでの手順を問題なくすべて実行したと仮定すると、ここで AGameModeBase::PostLogin が呼び出されます。

    • サーバーはこの時点で RPC 関数をこの PlayerControlle 上に安全に呼び出すことができます。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback