リージョン別マッチメイキングを設定する
注釈:本資料はAI技術を用いて翻訳されています。
概要
AccelByte Gaming Services (AGS) Matchmaking では、地理的リージョンに基づいてプレイヤーをマッチさせることができます。この記事では、リージョンベースのマッチメイキングをゲームに実装する方法を示します。
前提条件
この記事のすべての手順を完了するには、次のものが必要です。
- 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": ""
}
次の API エンドポイントを使用して、Quality of Service (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) を使用している場合は、使用したいリージョンを追加するか、セッションテンプレートで使用されるデプロイ設定のリージョンを選択していることを確認してください。

選択したリージョンがリージョン設定でアクティブになっていることを確認してください。これを行うには、次の手順に従います。
-
AGS 管理ポータルで、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
});
});
優先リージョンに利用可能なサーバーが存在しない場合は、次に最適なリージョンからサーバーがリクエストされます。