マッチメイキングのシナリオと構成の例

概要

キューとルールのシステムでは、さまざまなシナリオを柔軟に処理することができます。 以下は、より一般的なマッチメイキングのユースケースと、関連するキューの例です。 これらはそれぞれ、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つのキューを使って、セットの共通ルールを作成します。 プレイヤーは複数のゲームモードを指定できます。このルールでは、すべてのプレイヤーに共通のゲームモードが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つの例として、Royale のようなゲームを作成します。このゲームでは、最初に最大で50のプレーヤーを使用することが推奨されますが、その後は少しずつ満たされます。

またMinMatchSize MaxMatchSize 、拡張が含まれていないMatchTotalRule場合は、a を使用して、対戦に必要なプレイヤーの数を変更することができます。 関連付けられた属性については、各プレイヤーが1の値を指定します。ルールによって、このような組み合わせによって、時間の経過と共に変化するプレイヤーの数に対する要件が適用されます。

注意

MaxOverrides Or MinOverrides配列が指定されていない場合、代わりにルールのMaxMinの値または値が使用されることに注意してください。

"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 マッチメイキングは、チーム指向の一致をサポートします。 Teams を指定することによって、同じチケットで一緒に提出されたプレイヤーはすべて1つのチームに割り当てられるため、対戦を行うことはできません。

PlayFab マッチメイキングでは、チームのバランスを確実にするために、さまざまなチームルールもサポートされています。 次に示す例は、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は、どのようなサーバーのビルドを開始するかを表します。

フラグがServerAllocationEnabledtrue設定されているRegionSelectionRule場合は、a は一致するたびにサーバーを割り当てる場所を示す必要があります。

"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 対 12)

大規模なチームゲームには、追加の要件があります。 この例では、キューはマルチプレイヤーサーバーを作成するように構成されています。この場合、多くの場合、このようなプレーヤーでゲームを管理する必要があります。 これは、上の例と似ています。

スキルのほかに、チームの類似性を促進するために別のチームルールが追加されています。各側では大規模なチームを1つだけ使用できるため、Premade チームの一般的な状況が、ランダムプレーヤーの大規模に対応することはできません。

"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"
        }
    ]
}

バトル ロワイヤル

Royale ゲームでは、多くのユーザーが1つの分野に配置されています。 この例では、ゲームが4の teams で設定されています。 現時点では、この制限事項など、チームシナリオで許可されている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ないチケットでは、属性によって指定されている動作によって、任意のデバイス/プラットフォームと一致するかどうかを選ぶことができます。

"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"
        }
    ]
}

ホスト/Searcher または役割ベースの要件

PlayFab Match は、ゲームホストが事前に選択されていない、チケットベースの照合システムを使用します。 ただし、a を使って、 MatchTotalRule一致する必要があるホストの数を制限することによって、ホスト searcher システムをエミュレートできます。

チケットは、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つの drummer、2つの guitarists、および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 パックを使用している場合、プレーヤーは、a 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
    }
}