リージョンのマッチメイキングを設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services(AGS)マッチメイキングは、地理的リージョンに基づいてプレイヤーをマッチングできる機能を提供します。この記事では、リージョンベースのマッチメイキングをゲームに実装する方法を説明します。
前提条件
この記事のすべての手順を完了するには、以下が必要です:
- AGS Lobby、Matchmaking、Sessionに関する知識
- セッションテンプレート、マッチルールセット、マッチプールを設定済み
- ゲームクライアントにAGS Game SDKを統合済み
利用可能なすべてのリージョンでマッチメイキングリクエストを設定する
マッチメイキングリクエスト中、ゲームクライアントはマッチメイキング結果の優先リージョンとしてlatenciesフィールドにリージョンリストを提供できます。以下は、マッチメイキングをリクエストするためのペイロードの例です:
POST /match2/v1/namespaces/{namespace}/match-tickets
{
"attributes": {},
"latencies": {
"us-west-2":44,
"eu-west-2":187,
"ap-northeast-1":600
},
"matchPool": "matchpool_test",
"sessionID": ""
}
Quality of Service(QoS)から利用可能なリージョンのリストを取得するには、次のAPIエンドポイントを使用できます:
GET /qosm/public/qos
- OSS
- Unreal Engine
- Unity
// Using the StartMatchmaking() method,
// the OSS will automatically fill matchmaking tickets with all available QoS regions
// Matchmaking to all regions
TSharedRef<FOnlineSessionSearch> NewSearchHandle = MakeShared<FOnlineSessionSearch>();
NewSearchHandle->QuerySettings.Set(SETTING_SESSION_MATCHPOOL, "5v5bf", EOnlineComparisonOp::Equals);
if (!SessionInterface->StartMatchmaking(TArray<FSessionMatchmakingUser>{{LocalUserId1}}, NAME_GameSession, FOnlineSessionSettings(), NewSearchHandle, OnStartMatchmakingCompleteDelegate))
{
// Matchmaking failed to start
return false;
}
TArray<TPair<FString, float>> Latencies = AccelByteApiClient->Qos.GetCachedLatencies();
FAccelByteModelsV2MatchTicketOptionalParams Optionals;
Optionals.Latencies = Latencies;
AccelByteApiClient->MatchmakingV2.CreateMatchTicket(MatchPoolName,
CreateTicketSuccessHandler,
CreateTicketErrorHandler,
Optionals);
var qos = AccelByteSDK.GetClientRegistry().GetApi().GetQos();
var matchmaking = AccelByteSDK.GetClientRegistry().GetApi().GetMatchmakingV2();
string matchPoolName = "match-pool";
// Get latencies
qos.GetAllActiveServerLatencies(result =>
{
if (result.IsError)
{
// Do something if GetAllActiveServerLatencies fails
Debug.Log($"Error GetAllActiveServerLatencies, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
var optionals = new MatchmakingV2CreateTicketRequestOptionalParams()
{
latencies = result.Value
};
matchmaking.CreateMatchmakingTicket(matchPoolName, optionals, result =>
{
if (result.IsError)
{
// Do something if CreateMatchmakingTicket fails
Debug.Log($"Error CreateMatchmakingTicket, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if CreateMatchmakingTicket succeeds
});
});
特定のリージョンのマッチメイキングリクエストを設定する
マッチメイキング結果中に特定のリージョンを取得するには、ゲームクライアントはマッチチケットを作成するときに1つのリージョン(レイテンシ)のみを送信できます。
[AccelByte Multiplayer Servers(AMS)]*../03-multiplayer/multiplayer-servers/index.mdx)を使用している場合は、使用したいリージョンを追加するか、セッションテンプレートで使用されるデプロイメント設定リージョンを選択してください。

選択されるリージョンがリージョン設定でアクティブであることを確認してください。これを行うには、次の手順に従います:
-
AGS Admin Portalで、AccelByte Multiplayer Servers > QoS Regionsに移動します。
-
QoS Regionsページで、アクティブに設定したい国のActiveトグルボタンをオンに切り替えます。
以下は、ゲームクライアントが常にリージョン「us-west-2」でマッチメイキングをリクエストする例です:
POST /match2/v1/namespaces/{namespace}/match-tickets
{
"attributes": {},
"latencies": {
"us-west-2":44
},
"matchPool": "matchpool_test",
"sessionID": ""
}
- OSS
- Unreal Engine
- Unity
// Region names can be provided by setting the SearchSetting with `SETTING_GAMESESSION_REQUESTEDREGIONS` key
TSharedRef<FOnlineSessionSearch> NewSearchHandle = MakeShared<FOnlineSessionSearch>();
NewSearchHandle->QuerySettings.Set(SETTING_SESSION_MATCHPOOL, "5v5bf", EOnlineComparisonOp::Equals);
// Insert the region you want to lock to here
NewSearchHandle->QuerySettings.Set(SETTING_GAMESESSION_REQUESTEDREGIONS, "us-west-2", EOnlineComparisonOp::Equals);
if (!SessionInterface->StartMatchmaking(TArray<FSessionMatchmakingUser>{{LocalUserId1}}, NAME_GameSession, FOnlineSessionSettings(), NewSearchHandle, OnStartMatchmakingCompleteDelegate))
{
// Matchmaking failed to start
return false;
}
TArray<TPair<FString, float>> Latencies = AccelByteApiClient->Qos.GetCachedLatencies();
FAccelByteModelsV2MatchTicketOptionalParams Optionals;
// Filter the latencies list to only send region us-west-2
Optionals.Latencies = Latencies.FilterByPredicate([](const TTuple<FString, float>& Latency)
{
return Latency.Key == "us-west-2";
});
AccelByteApiClient->MatchmakingV2.CreateMatchTicket(MatchPoolName,
CreateTicketSuccessHandler,
CreateTicketErrorHandler,
Optionals);
var qos = AccelByteSDK.GetClientRegistry().GetApi().GetQos();
var matchmaking = AccelByteSDK.GetClientRegistry().GetApi().GetMatchmakingV2();
string matchPoolName = "match-pool";
// Get latencies
qos.GetAllActiveServerLatencies(result =>
{
if (result.IsError)
{
// Do something if GetAllActiveServerLatencies fails
Debug.Log($"Error GetAllActiveServerLatencies, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Only select latencies where the key is us-west-2
Dictionary<string, int> selectedLatencies = (Dictionary<string, int>)result.Value.Where(pair => pair.Key == "us-west-2");
var optionals = new MatchmakingV2CreateTicketRequestOptionalParams()
{
latencies = selectedLatencies
};
matchmaking.CreateMatchmakingTicket(matchPoolName, optionals, result =>
{
if (result.IsError)
{
// Do something if CreateMatchmakingTicket fails
Debug.Log($"Error CreateMatchmakingTicket, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}
// Do something if CreateMatchmakingTicket succeeds
});
});
優先リージョンにサーバーの準備ができていない場合、次に最適なリージョンからサーバーが要求されます。