ゲームで複数のレジストリのサポートを有効にする (Unreal)
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services (AGS) の複数のレジストリ機能は、1 つのゲームプロセスでのマルチプレイヤーをサポートします。この記事では、Unreal Engine ゲームをシングルトンベースのレジストリから複数のレジストリに移行し、複数のレジストリをサポートできるようにする方法を説明します。
ゲームクライアント
FApiClient ゲームクライアントは、FMultiRegistry から作成できるクラスです。FApiClient を構築するためにキーを準備する必要があります。キーは管理対象のユーザーを表し、識別子として機能します。複数のユーザーを同時に処理するには、このメソッドを使用して複数のキーを作成するか、ゲームが 1 つのゲームプロセスまたは実行ファイルに 1 人のプレイヤーしかいない場合は空のままにして default ユーザーを使用します。
FRegistry から FMultiRegistry に移行するには、以下の手順に従います:
-
すべて検索を使用してプロジェクト内のすべての
FRegistry::*クラスを見つけます。次に、シングルトンクラスの場合、FRegistry::をFMultiRegistry::GetApiClient()->に置き換えます。警告FRegistry::Settings、FRegistry::Credentials、FRegistry::HttpRetrySchedulerは変更しないでください。 -
名前変更後にコンパイルが引き続き実行されるか確認します。実行されない場合は、前の変更を元に戻して手順を繰り返してください。
- API Client
- 以前の使用方法
FMultiRegistry::GetApiClient()->User.LoginWithUsername(
TEXT("user+a@example.com"),
TEXT("Password321"),
FVoidHandler::CreateWeakLambda(this, [this]()
{
UE_LOG(LogTemp, Log, TEXT("Login successful"));
}), FErrorHandler::CreateWeakLambda(this, [](int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Error, TEXT("Login Failed : %d, %s"), ErrorCode, *ErrorMessage);
}));
FRegistry::User.LoginWithUsername(
TEXT("user+a@example.com"),
TEXT("Password321"),
FVoidHandler::CreateWeakLambda(this, [this]()
{
UE_LOG(LogTemp, Log, TEXT("Login successful"));
}), FErrorHandler::CreateWeakLambda(this, [](int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Error, TEXT("Login Failed : %d, %s"), ErrorCode, *ErrorMessage);
}));
ゲームサーバー
FRegistry から FMultiRegistry に移行するには、以下の手順に従います:
-
すべて検索を使用してプロジェクト内のすべての
FRegistry::*シングルトンクラスを見つけ、FRegistry::*をFMultiRegistry::GetServerApiClient()->に置き換えます。警告FRegistry::ServerSettingsは変更しないでください。
- API Client
- 以前の使用方法
auto ServerApiClient = FMultiRegistry::GetServerApiClient();
ServerApiClient->ServerOauth2.LoginWithClientCredentials(FVoidHandler::CreateWeakLambda(this, [this]()
{
UE_LOG(LogTemp, Log, TEXT("Login With Credentials success"));
}), FErrorHandler::CreateWeakLambda(this, [this](int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Error, TEXT("Login With Credentials failed, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));
FRegistry::ServerOauth2.LoginWithClientCredentials(FVoidHandler::CreateWeakLambda(this, [this]()
{
UE_LOG(LogTemp, Log, TEXT("Login With Credentials success"));
}), FErrorHandler::CreateWeakLambda(this, [this](int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Error, TEXT("Login With Credentials failed, Error Code: %d Error Message: %s"), ErrorCode, *ErrorMessage);
}));
AGS OSS とクライアント SDK の併用
AGS Online Subsystem (OSS) を使用してログインを処理している場合に ApiClient を取得するには、以下の手順に従います:
-
DefaultEngine.ini設定ファイルを確認します。1 つのゲームプロセスに複数のローカルプレイヤーがいる場合は、bMultipleLocalUsersEnabledがtrueであることを確認します。[OnlineSubsystemAccelByte]
bEnabled=true
bAutoLobbyConnectAfterLoginSuccess=false
bMultipleLocalUsersEnabled=true -
プレイヤーの認証とプロファイルに使用される AGS Online Identity Interface を使用してユーザーをログインさせます。
-
ログイン後、渡される
LocalUserNumをメモします。virtual bool Login(int32 LocalUserNum, const FOnlineAccountCredentials& AccountCredentials) override; -
[OnLoginCompleteDelegates](https://docs.unrealengine.com/4.27/en-US/API/Plugins/OnlineSubsystem/Interfaces/IOnlineIdentity/OnLoginCompleteDelegates/index.html)を使用して Identity インターフェースからログイン結果を取得します。 -
ユーザーがログインした後、AGS Identity インターフェースから以下の関数を呼び出します:
IOnlineSubsystem* SubsystemAB = IOnlineSubsystem::Get(ACCELBYTE_SUBSYSTEM);
const FOnlineIdentityAccelBytePtr IdentityPtr = StaticCastSharedPtr<FOnlineIdentityAccelByte>(SubsystemAB->GetIdentityInterface());
FApiClientPtr ApiClient = IdentityPtr->GetApiClient(in32 LocalUserNum); -
ログインに使用したものと同じ
LocalUserNumを渡します。FApiClientPtrが返され、指定されたユーザーによるさまざまな API 呼び出しに使用できます。
Blueprint 実装
以下の Blueprint 図は、Login with Username API を呼び出すために Unreal Engine で API を使用するために必要なフローを示しています。
UI の実装は、ゲームと選択したログイン方法によって異なる場合があります。

このフローを作成するには、以下の手順に従います:
-
Get Api Clientを呼び出します。 -
Return Valueで、使用したい API を呼び出します。この場合はUserAPI になります。 -
この API が正常に呼び出されたら、
Login with UsernameAPI を呼び出すことができます。
Login with Username API が正常に呼び出されたら、セットアップが完了です。