ドキュメント

サポート

Multiplay Hosting for the Unreal Engine

Multiplay Hosting overview

Multiplay Hosting for the Unreal Engine

C++ を使用した統合

Integrate Multiplay Hosting into your Unreal Engine game server using C++.
読み終わるまでの所要時間 5 分最終更新 14日前

以下のセクションでは、Unreal Engine のサブシステムを使用して Multiplay Game Server SDK を統合する方法を示します。 Multiplay Game Server SDK では、以下の 3 つのインターフェースを利用できます。 プログラミングサブシステム (Unreal Engine) を参照してください。

Multiplay Game Server SDK を依存関係として加える

先に進む前に、
MultiplayGameServerSDK
をモジュールのパブリック依存関係として追加し、プラグインのヘッダーファイルをクラスに加えます。
MultiplayGameServerSDK
をモジュールの依存関係として Unreal プロジェクトのビルドファイルに追加します。
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "MultiplayGameServerSDK" });
アクセスしたいプラグインのヘッダーファイルを自分のクラスに加えます。
#include "MultiplayServerConfigSubsystem.h"#include "MultiplayGameServerSubsystem.h"#include "MultiplayServerQueryHandlerSubsystem.h"

Multiplay Server Config Subsystem

このサブシステムを使用して、現在のセッションのサーバー設定を取得します。 このサブシステムは
server.json
ファイルを読み取り、その値を MultiplayServerConfig 構造体を介して公開します。
MultiplayServerConfig には以下の値があります。
  • サーバー ID。
  • 割り当て ID。
  • サーバークエリプロトコルのポート。
  • セッションの接続ポート。
  • ログを書き込むディレクトリ。
MultiplayServerConfigSubsystem は、サブシステムの初期化時に
server.json
ファイルを自動的に読み取ります。

UMultiplayServerConfigSubsystem へのアクセス方法

最初に、サブシステムへの参照を取得する必要があります。MultiplayServerConfigSubsystem は、GameInstanceSubsystem の 1 つです。GameInstance から取得できます。
UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayServerConfigSubsystem* ServerConfigSubsystem = GameInstance->GetSubsystem<UMultiplayServerConfigSubsystem>();

GetServerConfig

サブシステムへの参照を取得したら、MultiplayServerConfigSubsystem::GetServerConfig() を使用して MultiplayServerConfig を取得します。 例を次に示します。
const FMultiplayServerConfig& ServerConfig = ServerConfigSubsystem->GetServerConfig();UE_LOG(YourLogCategory, Log, TEXT("Server ID: %lld Allocation ID: %s Server Query Port: %u Port: %u Server Log Directory: %s"), ServerConfig.ServerId, *ServerConfig.AllocationId, ServerConfig.QueryPort, ServerConfig.Port, *ServerConfig.ServerLogDirectory)

Multiplay Game Server Subsystem

Multiplay Game Server Subsystem を使用すると、ゲームサーバーが割り当て済みになったときやゲームサーバーがプレイヤーを受け入れる準備ができたときなどのゲームサーバーイベントにサブスクライブ (および応答) できます。ゲームサーバーのライフサイクルサーバーの準備状況 を参照してください。 Multiplay Game Server Subsystem には、MultiplayGameServerSubsystem サブシステムへの参照を取得することでアクセスできます。MultiplayGameServerSubsystemGameInstanceSubsystem の 1 つであり、GameInstance から取得できます。
UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayGameServerSubsystem* GameServerSubsystem =GameInstance->GetSubsystem<UMultiplayGameServerSubsystem>();

SubscribeToServerEvents

SubscribeToServerEvents() メソッドを使用して、ゲームサーバーインスタンスと SDK デーモンの間の接続を確立します。 SDK デーモンは、OnAllocateOnDeallocate などのイベントをゲームサーバーに送信します。これらのイベントにサブスクライブすることで、マッチメーカー (または他の割り当てサービス) がゲームセッションに対して Multiplay の割り当ておよび割り当て解除を行ったときにゲームサーバーに通知されます。
GameServerSubsystem->SubscribeToServerEvents();

OnAllocate

OnAllocate
マルチキャストデリゲートは、ゲームサーバーが割り当てられたときにゲームサーバーに通知されるようにします。インスタンスが割り当てられたときに通知されるようにするには、ゲームサーバーインスタンスが OnAllocate コールバックにサブスクライブする必要があります。
OnAllocate コールバックを使用して、ゲームサーバーが割り当て済みになったときに必要な設定ロジックを実行します。
GameServerSubsystem->OnAllocate.AddDynamic(this, &UMyClass::OnAllocate);

ReadyServerForPlayers

ReadyServerForPlayers() メソッドを使用して、ゲームサーバーがプレイヤーを受け入れる準備ができたことを Multiplay に通知します。
void UMyClass::OnAllocate(){ // Perform setup logic. FReadyServerSuccessDelegate OnSuccess; FReadyServerFailureDelegate OnFailure; OnSuccess.BindDynamic(this, &UMyClass::OnReadyServerSuccess); OnFailure.BindDynamic(this, &UMyClass::OnReadyServerFailure); GameServerSubsystem->ReadyServerForPlayers(OnSuccess, OnFailure);}

UnreadyServer

UnreadyServer() メソッドを使用して、ゲームサーバーがプレイヤーを受け入れる準備ができなくなったことを Multiplay に通知します。 UnreadyServer() を使用するシナリオとしては、以下のような場合が考えられます。
  • ゲームマッチがほぼ完了した
  • ゲームマッチが完了した
  • ゲームサーバーがいっぱいになった
    FUnreadyServerSuccessDelegate OnSuccess;FUnreadyServerFailureDelegate OnFailure;OnSuccess.BindDynamic(this, &UMyClass::OnUnreadyServerSuccess);OnFailure.BindDynamic(this, &UMyClass::OnUnreadyServerFailure);GameServerSubsystem->UnreadyServer(OnSuccess, OnFailure);

OnDeallocate

OnDeallocate コールバックを使用して、割り当て解除イベントにサブスクライブします。割り当て解除イベントへの応答として、土壇場でのクリーンアップやブックキーピングの実行が必要になることもあります。
GameServerSubsystem->OnDeallocate.AddDynamic(this, &UMyClass::OnDeallocate);

Multiplay Server Query Handler Subsystem

Multiplay Server Query Handler Subsystem を使用すると、ゲームサーバークエリプロトコルによって監視されるゲームサーバー変数を設定できます。 Multiplay Server Query Handler Subsystem を使用して、関連情報をゲームサーバーの SQP プロトコルに送信します。 Multiplay Server Query Handler Subsystem を使用する前に、以下のコードスニペットに示すようにそれを取得する必要があります。
UWorld* GameWorld = GetWorld();UGameInstance* GameInstance = GameWorld->GetGameInstance();UMultiplayServerQueryHandlerSubsystem * ServerQueryHandlerSubsystem = GameInstance->GetSubsystem<UMultiplayServerQueryHandlerSubsystem >();
このサブシステムを取得した後で、ゲームサーバーの接続および切断と、ゲームサーバークエリ値の設定および取得を行うことができます。 すべてのゲームサーバークエリ値の設定は、以下のような set メソッドを使用して行います。 ゲームサーバークエリ値にアクセスするには、以下のようなアクセサーメソッドを使用します。

IncrementCurrentPlayers

IncrementCurrentPlayers() は、プレイヤーがマッチに参加するたびに現在のプレイヤー数をアトミックに増加させる手段を提供します。
ServerQueryHandlerSubsystem->IncrementCurrentPlayers();

DecrementCurrentPlayers

DecrementCurrentPlayers() は、プレイヤーがマッチから退出するたびに現在のプレイヤー数をアトミックに減少させる手段を提供します。
ServerQueryHandlerSubsystem->DecrementCurrentPlayers();

SetCurrentPlayers

SetCurrentPlayers() メソッドを使用して、ゲームサーバーに接続しているプレイヤーの数を設定します。以下の例は、現在のプレイヤー数を
32
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetCurrentPlayers(32);

SetMaxPlayers

SetMaxPlayers() メソッドを使用して、ゲームサーバーに接続できるプレイヤーの最大数を設定します。以下の例は、接続できるプレイヤーの最大数を
64
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetMaxPlayers(64);

SetServerName

SetServerName() メソッドを使用して、ゲームサーバー名を設定します。以下の例は、ゲームサーバー名を
AwesomeServer
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetServerName(TEXT("AwesomeServer"));

SetGameType

SetGameType() メソッドを使用して、ゲームサーバーが実行しているゲームのタイプを設定します。以下の例は、ゲームのタイプを
SearchAndDestroy
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetGameType(TEXT("SearchAndDestroy"));

SetBuildId

SetBuildId() メソッドを使用して、ゲームサーバーのビルド ID を設定します。以下の例は、ビルド ID を
NewBuildId.123.0.1
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetBuildId(TEXT("NewBuildId.123.0.1"));

SetMap

SetMap() メソッドを使用して、ゲームサーバーのマップ名を設定します。以下の例は、ゲームのマップを
MAP_TD_Dusthill
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetMap(TEXT("MAP_TD_Dusthill"));

SetPort

SetPort() メソッドを使用して、ゲームサーバーのポート番号を設定します。以下の例は、ゲームサーバーのポートを
8080
に設定する方法を示しています。
ServerQueryHandlerSubsystem->SetPort(8080);
これらの値は、ゲームの継続時間全体を通じて継続的に更新するのが最良です。これらの値をできる限り最新の状態に維持することにより、Multiplay がサーバーの実行中に確実にデータを収集および表示できるようになります。すべての値を設定した後で、Connect() メソッドの呼び出しを行うことができます。

Connect

Connect() メソッドを使用して、ゲームサーバーに接続します。
ServerQueryHandlerSubsystem->Connect();

GetCurrentPlayers

GetCurrentPlayers() メソッドを使用して、ゲームサーバーに接続しているプレイヤーの数を取得します。
int32 CurrentPlayers = ServerQueryHandlerSubsystem->GetCurrentPlayers();

GetMaxPlayers

GetMaxPlayers() メソッドを使用して、ゲームサーバーで許可されるプレイヤーの最大数を取得します。
int32 MaxPlayers = ServerQueryHandlerSubsystem->GetMaxPlayers();

GetServerName

GetServerName() メソッドを使用して、ゲームサーバー名を取得します。
FString ServerName = ServerQueryHandlerSubsystem->GetServerName();

GetGameType

GetGameType() メソッドを使用して、ゲームサーバーのタイプを取得します。
FString GameType = ServerQueryHandlerSubsystem->GetGameType();

GetBuildId

GetBuildId() メソッドを使用して、ゲームサーバーが実行しているビルドの ID を取得します。
FString BuildId = ServerQueryHandlerSubsystem->GetBuildId();

GetMap

GetMap() メソッドを使用して、ゲームサーバーのアクティブなマップを取得します。
FString Map = ServerQueryHandlerSubsystem->GetMap();

GetPort

GetPort() メソッドを使用して、ゲームサーバーのポート番号を取得します。
int32 Port = ServerQueryHandlerSubsystem->GetPort();

切断

Disconnect() メソッドを使用して、ゲームサーバーの更新から切断します。サーバーから切断した後は、ゲームサーバーに関する更新 (割り当てイベントや割り当て解除イベントなど) を受信できなくなります。
ServerQueryHandlerSubsystem->Disconnect();