メインコンテンツまでスキップ

カスタムマッチメイキングに X-Ray を使用する

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

この記事では、ゲームのカスタムマッチメイキングにAccelByte Gaming Services(AGS)マッチメイキング X-Ray ツールを使用する方法について説明します。

前提条件

  • マッチメイキングのカスタマイズの理解。
  • AGS バージョン 3.76 以降の環境。
  • マッチメイキング X-Ray がチケットを追跡できるようにするには、マッチメイキングルールセットに "ticket_observability_enable": true パラメータを追加します。

マッチメイキングプロセスデータの送信

カスタムマッチメイキングでマッチメイキングチケットのデータを X-Ray 機能がスクレイピングできるようにするには、カスタムマッチメイキングアプリがこのエンドポイントを呼び出す必要があります。

POST <baseURL>/sessionhistory/v2/admin/namespaces/<namespace>/xray/tickets

マッチメイキングプロセスデータを送信する際に使用できるアクションはいくつかあります。各アクションは、チケットが開始、キャンセル、または期限切れになった場合の以下のアクション以外は、同じペイロード構造を共有します。これらはすでにデフォルトでセッション履歴に送信されています。

  • matchFound: このアクションを使用して、マッチングされたチケットのデータを追跡します。
  • matchNotFound: このアクションを使用して、まだキューに残っていて、タイムアウト期間前にまだマッチングされていないチケットのデータを追跡します。
  • flexed: このアクションを使用して、フレックス状態にあるチケットのデータを追跡します。

マッチメイキングプロセス

この図は、マッチメイキングプロセス中に POST <baseURL>/sessionhistory/v2/admin/namespaces/<namespace>/xray/tickets エンドポイントをいつ呼び出すべきかを示しています。

Call endpoint diagram

サンプルコード

次の疑似コードは、POST <baseURL>/sessionhistory/v2/admin/namespaces/<namespace>/xray/tickets エンドポイントが呼び出される一般的なシナリオを示しています。

Pseudocode

function MakeMatches():
if isRuleFlexed == "yes":
callEndpoint("Publish ticket observability", "Flexed")

if IsMatched == "yes":
callEndpoint("Publish ticket observability", "matchFound")
else:
callEndpoint("Publish ticket observability", "matchNotFound")
注記

X-Ray は、カスタムマッチメイキングによって送信されたデータのみをスクレイピングして公開します。入力されていないフィールドがある場合、それらは X-Ray に表示されません。

チケットデータを送信するたびに、エンドポイントを呼び出すようにしてください。マッチメイキングプロセスの各イテレーション (「ループ」と呼ばれる) では、flexed および matchNotFound アクションがループごとに 1 回送信されるため、単一のマッチメイキングチケット内でデータを複数回送信できます。

サンプルシナリオ

以下は、5v5 マッチメイキングモードに基づいて X-Ray にイベントを記録するサンプルシナリオです。

マッチメイキングプロセスの開始

プレイヤーがマッチのキューに入り、システムは次のような特定の基準を満たす他のプレイヤーの検索を開始します。

  • スキルレベル (ランキングまたは過去のパフォーマンスに基づく)
  • 地理的な場所 (低レイテンシを確保するため)
  • 優先ロール (例: タンク、サポート、またはダメージ)

新しいプレイヤーがキューに参加すると、システムは複数のマッチメイキングサイクルを実行します。

ルールのフレックス

このシナリオでは、isRuleFlexedyes に設定されています (isRuleFlexed = "yes")。指定された待機期間 (例: 2 分) の後、正確な基準を満たすプレイヤーが十分にいない場合、システムは待機時間を短縮するために特定のルールをフレックスする可能性があります。例えば:

  • スキル範囲の拡大: 狭いスキル範囲にマッチを制限する代わりに、システムはより広い範囲のスキルレベルの参加を許可します。
  • リージョンの拡大: システムは地理的制限を緩和し、許容可能なレイテンシを持つ近隣リージョンのプレイヤーが参加できるようにします。

この段階で、X-Ray を使用するカスタムマッチメイキングシステムは、flexed アクションでエンドポイントを呼び出してイベントをログに記録する必要があります。

マッチが見つかった

ルールをフレックスした後、システムは緩和された基準を満たす 5 人のプレイヤーの 2 つのチームを正常にマッチングし、マッチが見つかったシナリオ (isMatched = "yes") になります。この時点で、カスタムマッチメイキングシステムは、matchFound アクションでエンドポイントを呼び出してイベントをログに記録する必要があります。

マッチが見つからなかった

合理的な時間枠内にマッチが見つからない場合 (isMatched = "no")—おそらくプレイヤーの活動が低いか、1 日の異常な時間であるため—カスタムマッチメイキングシステムは、matchNotFound アクションでエンドポイントを呼び出してイベントをログに記録する必要があります。

サンプルリクエストボディテンプレート

{
"action": "matchFound",
"activeAllianceRule": {
"max_number": 2,
"min_number": 2,
"player_max_number": 5,
"player_min_number": 5
},
"activeMatchingRule": [
{
"attribute": "mmr",
"criteria": "distance",
"reference": 100
}
],
"function": "extend",
"gameMode": "5v5",
"isBackfillMatch": true,
"isRuleSetFlexed": true,
"iteration": 7,
"matchID": "d8140d69de02465b934281050dc0d69b",
"namespace": "GameAB",
"partyID": "0cc0cb97804b4ffd9fd8130f6e2622bb",
"remainingPlayersPerTicket": [
0
],
"remainingTickets": 0,
"sessionTickID": "3c29c2df8a0a44ac9a00afa69c14e8f7",
"tickID": 1727664260471,
"timeToMatchSec": 4.71937726,
"timestamp": "2024-07-23T07:07:56.067Z",
"unbackfillReason": "unbackfill_blocked_player_exist",
"unmatchReason": "not_enough_players"
}

この表は、リクエストボディの各パラメータを説明しています。

フィールド名フィールドの説明必須値の形式サンプル値
timestampエンドポイントを呼び出す際のタイムスタンプいいえTime2024-07-23T07:07:56.067Z
partyIDチケットパーティー IDいいえString0cc0cb97804b4ffd9fd8130f6e2622bb
matchIDマッチの ID。マッチが見つかったときのみ入力されますいいえStringd8140d69de02465b934281050dc0d69b
Namespaceチケットの現在の名前空間いいえStringGameAB
gameModeチケットの現在のマッチプールいいえString5v5
activeAllianceRule現在のアクティブなアライアンスルールセットいいえJSON(サンプル値を参照。)
activeMatchingRule現在のアクティブなマッチングルールセットいいえJSON(サンプル値を参照。)
functionエンドポイントを呼び出した関数の名前いいえStringextend
iterationマッチが見つかるまでの総イテレーション数いいえInteger7
TimeToMatchSecマッチまでの時間 (秒単位)。マッチが見つかったときのみ入力されますいいえFloat644.71937726
unmatchReasonマッチが見つからなかった理由いいえStringnot_enough_players
remainingTicketsマッチが見つからなかったときの残りチケット数いいえInteger0
remainingPlayersPerTicketマッチが見つからなかったときの残りプレイヤー数いいえInteger0
UnbackfillReasonバックフィルできなかった理由いいえStringunbackfill_blocked_player_exist
IsBackfillMatch新しいマッチとバックフィルマッチを区別するフラグいいえBooleantrue
IsRuleSetFlexedルールセットがフレックスされている場合のフラグいいえBooleanfalse
tickIDマッチメイキングチケットのチケット IDいいえInt641727664260471
sessionTickIDマッチ実行時にセッションを区別するためのセッションチケット IDいいえString3c29c2df8a0a44ac9a00afa69c14e8f7

カスタムマッチメイキングによって送信されたデータは、AGS 管理ポータルの Multiplayer > Diagnostics and Utilities > Matchmaking X-Ray で確認できます。

注記

リクエストボディのすべてのフィールドはオプションですが、それらは X-Ray によってキャプチャされます。他のフィールドは公開またはキャプチャされません。たとえば、マッチングに特定の構成に依存する matchingRules フィールドがある場合、その値を activeAllianceRule に注入する必要があります。

サンプル ActiveAllianceRule 値

[
{
"max_number": 0,
"min_number": 0,
"player_max_number": 0,
"player_min_number": 0
}
]

サンプル ActiveMatchingRule 値

[
{
"attribute": "string",
"criteria": "string",
"reference": 0
}
]