マッチメイキング シナリオと構成の例
概要
キューとルールのシステムは、多数のシナリオを柔軟に処理できます。 以下は、より一般的なマッチメイキングのユースケースと関連するキューの例です。 それぞれは PlayFab API を介して直接送信することができます。 これらのオプションはゲーム マネージャーの UI からも設定できます。
[最初のキュー] または [クイック マッチ]
すべてのタイトルは、この単純なキューから始めて、基本的な流れを解決する必要があります。 このキューは 2 人のプレイヤーを一緒に照合します。また、マッチを行うためにプレイヤーが同じビルド文字列を渡すことを要求する 1 つのオプション ルールが含まれています。 ビルドが指定されていない場合、ビルドに関係なく、このキュー内の他のプレイヤーと対戦することができます。
"MatchmakingQueue": {
"Name": "MyFirstQueue",
"MinMatchSize": 2,
"MaxMatchSize": 2,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "StringEqualityRule",
"Attribute": {
"Path": "Build",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "BuildVersionRule"
}
]
}
複数のゲーム モード
タイトルには、ゲームをプレイするためのさまざまな方法があります。 これらのプレイヤーが互いにマッチしてはいけない場合、別々のキューに入れることでパフォーマンスが最適化されます。
{
"MatchmakingQueue": {
"Name": "FreeForAllQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"Rules": [
]
}
}
{
"MatchmakingQueue": {
"Name": "CaptureTheFlagQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"Rules": [
]
}
}
クロス ゲーム モードの検索
プレイヤーがゲームモード間で他のプレイヤーとマッチすることを目的としている場合は、単一のキューを使用して、交差設定ルールを作成します。 プレイヤーは複数のゲーム モードを指定することができ、ルールはすべてのプレイヤーが少なくとも 1つ の共通のゲーム モードを含むものにマッチを制限します。
注意
正しく機能するためには、プレイに必要なプレイヤーの数はモード間で同じでなければなりません。
{
"MatchmakingQueue": {
"Name": "MultiGameModeSearchQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "SetIntersectionRule",
"MinIntersectionSize": 1,
"Attribute": {
"Path": "GameMode",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "GameModeRule"
}
]
}
}
スキルベースの自由参加型のゲーム、拡張あり
一般的なシナリオは、スキルに基づいてプレイヤー同士をマッチさせることです。 この例では、キューはプレイヤーのスキル属性が 0.2 以内であることを要求し、これらの属性は時間の経過とともに 0.5 まで増加します。 30 秒以上待つチケットの場合、スキルの差は許可されます。
この例の値は、利用可能なスキルの範囲が 0 から 1 の間であると仮定して選択されています。 これらは、プレイヤーのスキルを追跡するためにタイトルが使用する値の範囲と、マッチのスピードよりもスキルにどれだけ重点が置かれているかに合うように調整される必要があります。
さらに、30 秒でオプションになるルールは、まったくプレイしないよりもアンバランスなスキルでもゲームをプレイする方が良いゲームを対象としています。 アンバランスなゲームが否定的な経験を引き起こすゲームの場合、SecondsUntilOptional
は、調整することができます。 完全に削除すると、ルールは無期限にアクティブのままになります。
"MatchmakingQueue": {
"Name": "SkillBasedFreeForAllQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "DifferenceRule",
"Difference": 0.2,
"MergeFunction": "Average",
"DefaultAttributeValue": 0.5,
"Expansion": {
"Delta": 0.1,
"Limit": 0.5,
"Type": "Linear",
"SecondsBetweenExpansions": 5
},
"Attribute": {
"Path": "Skill",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "UseDefault",
"Weight": 1,
"Name": "SkillRule",
"SecondsUntilOptional": 30
}
]
}
拡張のカスタマイズ
各時間間隔で任意の値を使用するように拡張をカスタマイズできます。 たとえば、許可されたスキルを開始するためにゆっくりとスキルを成長させ、時間の経過とともに急速にスキルを成長させることができます。
"MatchmakingQueue": {
"Name": "SkillBasedFreeForAllCustomExpansionQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "DifferenceRule",
"Difference": 0.2,
"MergeFunction": "Average",
"DefaultAttributeValue": 0.5,
"Expansion": {
"DifferenceOverrides": [
0.025,
0.05,
0.1,
0.2,
0.3,
0.5
],
"Type": "Custom",
"SecondsBetweenExpansions": 5
},
"Attribute": {
"Path": "Skill",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "UseDefault",
"Weight": 1,
"Name": "SkillRule",
"SecondsUntilOptional": 30
}
]
}
時間の経過によるプレイヤーの数の拡張
一部のタイトルでは、最初からフル マッチを希望していますが、時間が経過するにつれて満足できる人は少なくなります。 そのような例の 1 つはバトル ロワイヤル スタイルのゲームです。50 人ほどのプレイヤーで始めることが好ましいですが、少ない人数でも満足できる場合もあります。
MinMatchSize
と MaxMatchSize
には拡張がないため、MatchTotalRule
をマッチに必要なプレイヤーの数を変更するために使用することができます。 各プレイヤーは関連する属性に 1 の値を指定し、ルールはこれらの値を合計して、時間の経過とともに変化する対戦相手のプレイヤー数に関する要件を強制します。
注意
MaxOverrides
OrMinOverrides
配列が指定されていない場合、ルールの元のMax
orMin
値が使用されることに注意してください。
"MatchmakingQueue": {
"Name": "PlayerExpansionOverTime",
"MinMatchSize": 8,
"MaxMatchSize": 50,
"ServerAllocationEnabled": false,
"Rules": [
{
"Type": "MatchTotalRule",
"Attribute": {
"Path": "PlayerCount",
"Source": "User"
},
"Min": 8,
"Max": 50,
"Weight": 1,
"Expansion": {
"MinOverrides": [
50,
45,
40,
35,
25,
16,
8
],
"Type": "Custom",
"SecondsBetweenExpansions": 10
},
"Name": "PlayersRequiredRule",
"SecondsUntilOptional": 60
}
],
}
標準的な 4v4 スタイルのスキル ベース
PlayFab マッチメイキングはチーム指向のマッチをサポートします。 チームを指定することで、同じチケットで一緒に送信されたプレイヤーはすべて 1 つのチームに割り当てられ、対戦することを強いられることはありません。
PlayFab Matchmaking は、チームのバランスを保つためにさまざまなチーム ルールに対応しています。 以下に示す例は 4v4 のマッチのもので、スキルのバランスが取れていることを確認できます。
"MatchmakingQueue": {
"Name": "Standard4v4TeamsQueue",
"MinMatchSize": 8,
"MaxMatchSize": 8,
"ServerAllocationEnabled": false,
"Teams": [
{
"Name": "Red",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "Blue",
"MinTeamSize": 4,
"MaxTeamSize": 4
}
],
"Rules": [
{
"Type": "TeamDifferenceRule",
"Attribute": {
"Path": "Skill",
"Source": "User"
},
"Difference": 0.2,
"DefaultAttributeValue": 0.5,
"Expansion": {
"Delta": 0.1,
"Limit": 0.5,
"Type": "Linear",
"SecondsBetweenExpansions": 5
},
"Name": "TeamSkillRule",
"SecondsUntilOptional": 30
}
]
}
マルチプレイヤー サーバー
キューは自動的に PlayFab のマルチプレイヤー サーバー機能に提供され、サーバーを割り当て、マッチしたプレイヤーのリストを提供します。 このキューは設定の最小の例を提供しています。この場合、ServerAllocationEnabled
フラグは、起動するサーバーのビルドを示すBuildId
とともに提供されます。
ServerAllocationEnabled
フラグにtrue
が設定されている場合、RegionSelectionRule
は、マッチごとにどこにサーバーを割り当てるべきかを示すためにも必要です。
"MatchmakingQueue": {
"Name": "MultiplayerServersQueue",
"MinMatchSize": 24,
"MaxMatchSize": 24,
"ServerAllocationEnabled": true,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Rules": [
{
"Type": "RegionSelectionRule",
"MaxLatency": 200,
"Path": "Latency",
"Weight": 1,
"Name": "RegionSelectionRule"
}
]
}
ビッグ チーム バトル (12 vs 12)
大規模なチームのゲームには追加の要件があります。 この例では、キューはマルチプレイヤー サーバーを作成するように構成されています。多くのプレイヤーでのゲームを管理するためには、多くの場合、マルチプレイヤー サーバーが必要とされます。 これは上記の例と似ています。
スキルに加えて、チームの類似性を促進するために別のチーム ルールが追加されています。各サイドには 1 つの大きなチームのみが許可され、事前に構成されたチームが、多数のプレイヤーとランダムに対戦するのを防ぎます。
"MatchmakingQueue": {
"Name": "LargeTeamsQueue",
"MinMatchSize": 24,
"MaxMatchSize": 24,
"ServerAllocationEnabled": true,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Teams": [
{
"Name": "Red",
"MinTeamSize": 12,
"MaxTeamSize": 12
},
{
"Name": "Blue",
"MinTeamSize": 12,
"MaxTeamSize": 12
}
],
"Rules": [
{
"Type": "TeamTicketSizeSimilarityRule",
"Name": "PreventLargePremadeVersusRandomsRule",
"SecondsUntilOptional": 20
},
{
"Type": "TeamDifferenceRule",
"Attribute": {
"Path": "Skill",
"Source": "User"
},
"Difference": 0.1,
"DefaultAttributeValue": 0.5,
"Expansion": {
"Delta": 0.1,
"Limit": 0.5,
"Type": "Linear",
"SecondsBetweenExpansions": 5
},
"Name": "TeamSkillRule",
"SecondsUntilOptional": 30
},
{
"Type": "RegionSelectionRule",
"MaxLatency": 200,
"Path": "Latency",
"Weight": 1,
"Name": "RegionSelectionRule"
}
]
}
バトル ロワイヤル
バトル ロワイヤルのゲームでは、多くの人々がアリーナに入ることができます。 この例では、ゲームは 4 つのチームで設定されています。 現在、このようなチーム シナリオでは、32人のプレイヤーという制限があります。この制限は将来改善されることが予想されます。
この例には、専用サーバー用のマルチプレイヤー サーバー設定情報も含まれています。このサーバーは、多数のプレイヤーがいるゲームには必要とされる場合が、よくあります。 これは上記の例と似ています。
"MatchmakingQueue": {
"Name": "BattleRoyaleStyleQueueWithTeams",
"MinMatchSize": 32,
"MaxMatchSize": 32,
"ServerAllocationEnabled": true,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Teams": [
{
"Name": "team1",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team2",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team3",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team4",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team5",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team6",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team7",
"MinTeamSize": 4,
"MaxTeamSize": 4
},
{
"Name": "team8",
"MinTeamSize": 4,
"MaxTeamSize": 4
}
],
"Rules": [
{
"Type": "RegionSelectionRule",
"MaxLatency": 200,
"Path": "Latency",
"Weight": 1,
"Name": "RegionSelectionRule"
}
]
}
クロス デバイス/クロス プラットフォーム
特定のデバイスのゲームを制限する、または対戦するマッチのプラットフォームを制限する場合は、デバイスを文字列等価ルールで指定します。
MatchAny
の AttributeNotSpecifiedBehavior を使うと、デバイスを指定しないチケットは、どのデバイス/プラットフォームともマッチすることを選ぶことができます。 マッチメイキング時間が予想よりも長い場合は、クロスプレイをサポートするために必要に応じてクロスプラットフォーム キューを使用して、プラットフォームごとに個別のキューを作成することを検討してください。
"MatchmakingQueue": {
"Name": "CrossDeviceQueue",
"MinMatchSize": 32,
"MaxMatchSize": 32,
"ServerAllocationEnabled": false,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Rules": [
{
"Type": "StringEqualityRule",
"Attribute": {
"Path": "DeviceType",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "CrossDeviceRule"
}
]
}
ホスト/検索者または役割ベースの要件
PlayFab Match はチケット ベースのマッチング システムを使用しているため、ゲーム ホストが事前に選択されることはありません。 ただし、MatchTotalRule
を使用してホスト検索システムをエミュレートし、マッチで許可されるホスト数を制限することができます。
1 を指定することで、チケットがホストの場合、チケットを事前に指定できます。 各マッチには、必ず 1 つのホストを含める必要があります。
注意
ホストの数が検索者を大幅に上回る場合、またはその逆の場合、すべてのプレイヤーのマッチメイキング時間が遅くなる可能性があります。 マッチメイキングの設計の影響を考慮して、マッチメイキング ルールとマッチに必要な平均時間を満たすのに十分なプレイヤーが特定のサブデータに存在することを確認します。
"MatchmakingQueue": {
"Name": "HostSearcherQueue",
"MinMatchSize": 8,
"MaxMatchSize": 8,
"ServerAllocationEnabled": false,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Rules": [
{
"Type": "MatchTotalRule",
"Attribute": {
"Path": "IsHost",
"Source": "User"
},
"Min": 1,
"Max": 1,
"Weight": 1,
"Name": "OneHostRule"
}
]
}
ゲームには役割の要件がある場合があります。たとえば、ゲームは 1 人のドラマー、2 人のギタリスト、1 人のボーカリストを必要とする場合があります。 または、1 つのタンク、2 つの DPS、1 つのサポートという役割です。 ゲームでは、MatchTotalRule
を使用して、以下に示すように、これらの役割を要求することができます。
"MatchmakingQueue": {
"Name": "RoleBasedQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Rules": [
{
"Type": "MatchTotalRule",
"Attribute": {
"Path": "TankSelected",
"Source": "User"
},
"Min": 1,
"Max": 1,
"Weight": 1,
"Name": "TankRule"
},
{
"Type": "MatchTotalRule",
"Attribute": {
"Path": "DPSSelected",
"Source": "User"
},
"Min": 2,
"Max": 2,
"Weight": 1,
"Name": "DPSRule"
},
{
"Type": "MatchTotalRule",
"Attribute": {
"Path": "SupportSelected",
"Source": "User"
},
"Min": 1,
"Max": 1,
"Weight": 1,
"Name": "SupportRule"
}
]
}
さまざまな重要度を持つルール
ルールは、どのチケットが別のチケットとのマッチに適格であるかを制限すること、および、チケットが選択される順序を選択することによって、マッチメイキングを可能にします。 複数のルールが存在する場合、すべての制限が考慮されます。 ただし、タイトルは、残りの適格なチケットよりもルールの優先順位を優先する場合があります。
以下の例では、プレイヤーはスキルと経験レベルが特定の範囲内である必要があります。 ただし、指定されたスキルと経験の境界内に多数のチケットがある場合、このキューでは経験レベルが近いものよりもスキルが近いものが優先されます。
制限を満たしたチケットを評価する際、スキルの違いは経験の違いの3 倍とカウントされます。
"MatchmakingQueue": {
"Name": "WeightingQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Rules": [
{
"Type": "DifferenceRule",
"Difference": 1,
"MergeFunction": "Average",
"Attribute": {
"Path": "skill",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 3,
"Name": "SkillRule"
},
{
"Type": "DifferenceRule",
"Difference": 5,
"MergeFunction": "Average",
"Attribute": {
"Path": "experience",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "ExperienceRule"
}
]
}
DLC パック
さまざまな DLC パックでは、プレイヤーはSetIntersectionRule
を使用して、DLC が一致する他のプレイヤーのみを見つけることを選ぶ場合があります。 各プレイヤーは自分が所有する DLC パックを渡します。マッチには少なくとも 1 つの DLC パックを共有するグループが必要です。
注意
30 秒後、ルールはオプションになり、プレイヤーは DLC を共有せずにマッチすることができます。
"MatchmakingQueue": {
"Name": "DlcQueue",
"MinMatchSize": 4,
"MaxMatchSize": 4,
"ServerAllocationEnabled": false,
"BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
"Rules": [
{
"Type": "SetIntersectionRule",
"MinIntersectionSize": 1,
"Attribute": {
"Path": "DlcPacks",
"Source": "User"
},
"AttributeNotSpecifiedBehavior": "MatchAny",
"Weight": 1,
"Name": "DlcRule",
"SecondsUntilOptional": 30
}
]
}
統計情報を有効にする
統計を有効にすると、タイトルにキューに関する情報を表示できます。 この情報は、プレイしたいゲーム モードを選択する場合に、プレイヤーの期待を設定するのに役立ちます。
逆に、ビジネス インテリジェンスを目的とするか、トラフィックの多いキューにプレイヤーを誘導することを避けるために、タイトルはこの情報を隠す場合があります。
以下のキューでは、キューに存在するプレイヤーの数とチケットの照合にかかる推定時間の両方を確認することができます。
注意
サーバーは常にこの情報を取得できます。以下に示す設定は、ユーザーがこの呼び出しを許可されているかどうかのみを制御します。
"MatchmakingQueue": {
"Name": "StatisticsEnabledQueue",
"MinMatchSize": 8,
"MaxMatchSize": 8,
"ServerAllocationEnabled": false,
"Rules": [],
"StatisticsVisibilityToPlayers": {
"ShowNumberOfPlayersMatching": true,
"ShowTimeToMatch": true
}
}