Freigeben über


Vergleichsszenario und Konfigurationsbeispiele

Übersicht

Das System von Warteschlangen und Regeln bietet die Flexibilität, eine große Anzahl von Szenarien zu verarbeiten. Im Folgenden finden Sie Beispiele für einige der gängigeren Matchmaking-Anwendungsfälle und die zugehörigen Warteschlangen. Jede dieser Apis kann direkt über PlayFab-APIs übermittelt werden. Diese Optionen können auch über die Game Manager-Benutzeroberfläche festgelegt werden.

Meine erste Warteschlange oder "Quick Match"

Jeder Titel sollte mit dieser einfachen Warteschlange beginnen, um die grundlegenden Flows zu ermitteln. Diese Warteschlange gleicht zwei Spieler zusammen und enthält eine optionale Regel, die erfordert, dass Spieler dieselbe Buildzeichenfolge übergeben müssen, um übereinstimmungen zu können. Wenn kein Build angegeben ist, kann der Spieler unabhängig vom Build mit anderen Spielern in dieser Warteschlange übereinstimmen.

"MatchmakingQueue": {
    "Name": "MyFirstQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "StringEqualityRule",
            "Attribute": {
                "Path": "Build",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "BuildVersionRule"
        }
    ]
}

Mehrere Spielmodi

Titel haben oft unterschiedliche Möglichkeiten, Spiele zu spielen. Wenn diese Spieler niemals miteinander übereinstimmen sollten, wird die Leistung optimiert, wenn sie in separaten Warteschlangen platziert werden.

{
    "MatchmakingQueue": {
        "Name": "FreeForAllQueue",
        "MinMatchSize": 4,
        "MaxMatchSize": 4,
        "ServerAllocationEnabled": false,
        "Rules": [
        ]
    }
}
{
    "MatchmakingQueue": {
        "Name": "CaptureTheFlagQueue",
        "MinMatchSize": 4,
        "MaxMatchSize": 4,
        "ServerAllocationEnabled": false,
        "Rules": [
        ]
    }
}

Wenn Spieler in spielmodiübergreifend mit anderen spielern übereinstimmen sollen, verwenden Sie eine einzelne Warteschlange, und erstellen Sie eine Regel zum Festlegen von Schnittmengen. Spieler können mehrere Spielmodi angeben, und die Regel schränkt Spiele auf Spiele ein, bei denen alle Spieler mindestens einen gemeinsamen Spielmodus enthalten.

Notiz

Die Anzahl der Spieler, die zum Spielen erforderlich sind, muss in allen Modi identisch sein, damit dies ordnungsgemäß funktioniert.

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

Skillbasiertes Free-for-All-Spiel mit Erweiterung

Ein sehr häufiges Szenario ist der Versuch, Spieler basierend auf Fähigkeiten zusammenzupassen. In diesem Beispiel erfordert die Warteschlange, dass die Qualifikationsattribute der Spieler innerhalb von 0,2 sein müssen, wobei diese Attribute im Laufe der Zeit auf 0,5 steigen. Bei Tickets, die länger als 30 Sekunden warten, ist jede Qualifikationsdifferenz zulässig.

Die Werte für dieses Beispiel werden unter der Annahme ausgewählt, dass die Bereiche der verfügbaren Qualifikationen zwischen 0 und 1 liegen. Diese sollten an den Bereich der Werte angepasst werden, die Ihr Titel verwendet, um die Fähigkeiten seiner Spieler zu verfolgen, und wie viel Wert auf Geschicklichkeit gegenüber der Geschwindigkeit eines Spiels gelegt wird.

Darüber hinaus ist die Regel, die bei 30 Sekunden optional wird, für Spiele gedacht, bei denen es besser ist, ein Spiel mit unausgewogenen Fähigkeiten zu spielen, als überhaupt nicht zu spielen. Für Spiele, bei denen ein unausgeglichenes Spiel eine völlig negative Erfahrung ist, SecondsUntilOptional kann angepasst werden. Wenn sie vollständig entfernt wird, bleibt die Regel auf unbestimmte Zeit aktiv.

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

Anpassen von Erweiterungen

Erweiterungen können angepasst werden, um beliebige Werte in jedem Zeitintervall zu verwenden. Für instance möchten Sie möglicherweise, dass der zulässige Skill langsam wächst und später im Laufe der Zeit immer schneller wächst.

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

Erweiterung der Anzahl von Spielern im Laufe der Zeit

Einige Titel bevorzugen es, ein vollständiges Match zu haben, aber im Laufe der Zeit werden sie mit immer weniger Personen zufrieden sein. Ein Solches Beispiel ist ein Battle Royale-Spiel, bei dem es bevorzugt wird, mit bis zu 50 Spielern zu beginnen, aber nach einiger Zeit mit weniger zufrieden ist.

Da MinMatchSize und MaxMatchSize keine Erweiterung enthalten, kann eine MatchTotalRule verwendet werden, um die Anzahl der Spieler zu ändern, die für ein Spiel erforderlich sind. Jeder Spieler gibt den Wert 1 für das zugeordnete Attribut an, und die Regel summiert diese zusammen, um eine Anforderung für die Anzahl der Spieler in einem Spiel zu erzwingen, die sich im Laufe der Zeit ändert.

Notiz

Beachten Sie, dass, wenn kein MaxOverrides -Array oder MinOverrides -Array angegeben ist, der ursprüngliche Max Oder Min -Wert der Regel an dessen Stelle verwendet wird.

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

Standard 4-gegen-4-Style-Skill basierend

PlayFab Matchmaking unterstützt teamorientierte Matches. Durch die Angabe von Teams werden Spieler, die zusammen im selben Ticket eingereicht werden, einem Team zugeordnet und nicht gezwungen, gegeneinander zu spielen.

PlayFab Matchmaking unterstützt auch verschiedene Teamregeln, um sicherzustellen, dass Teams ausgeglichen sind. Das unten gezeigte Beispiel gilt für eine 4-gegen-4-Übereinstimmung und stellt sicher, dass die Fähigkeiten auf sie verteilt sind.

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

Multiplayer-Server

Eine Warteschlange kann automatisch in das Multiplayer-Server-Feature von PlayFab eingespeist werden, wobei ein Server zugewiesen und eine Liste mit übereinstimmenden Spielern bereitgestellt wird. Diese Warteschlange bietet das kleinste Beispiel für eine solche Konfiguration, bei der es sich um das ServerAllocationEnabled Flag handelt, zusammen mit dem BuildId , der darstellt, welcher Build des Servers gestartet werden soll.

Wenn das ServerAllocationEnabled Flag auf truefestgelegt ist, ist auch erforderlich RegionSelectionRule , um anzugeben, wo ein Server für jede Übereinstimmung zugeordnet werden soll.

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

Big Team Battle (12 vs 12)

Größere Teamspiele haben möglicherweise zusätzliche Anforderungen. In diesem Beispiel wird die Warteschlange so konfiguriert, dass ein Multiplayerserver erstellt wird, der häufig erforderlich ist, um Spiele mit so vielen Spielern zu verwalten. Dies ähnelt dem obigen Beispiel.

Zusätzlich zu den Fähigkeiten wird eine weitere Teamregel hinzugefügt, um die Ähnlichkeit des Teams zu fördern - nur ein großes Team ist auf jeder Seite zulässig, wodurch verhindert wird, dass eine häufige Situation eines vorgefertigten Teams gegen eine große Gruppe von zufälligen Spielern abgeglichen wird.

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

Battle Royale

Battle Royale-Spiele bringen viele Menschen in eine Arena. In diesem Beispiel wird das Spiel mit vier Teams eingerichtet. Derzeit ist ein Limit von 32 Spielern in einem Teamszenario wie diesem zulässig. Diese Einschränkung wird in Zukunft verbessert.

Dieses Beispiel enthält auch Informationen zum Einrichten von Multiplayerservern für dedizierte Server, die häufig für Spiele mit einer großen Anzahl von Spielern erforderlich sind. Dies ähnelt dem oben gezeigten Beispiel.

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

Geräte-/plattformübergreifend

Um Spiele eines bestimmten Geräts oder einer plattformübergreifenden Übereinstimmung zu beschränken, geben Sie das Gerät mit einer Zeichenfolgengleichheitsregel an. Mit attributeNotSpecifiedBehavior von MatchAnykönnen Tickets, die kein solches Gerät angeben, mit jedem Gerät/jeder Plattform übereinstimmen. Wenn die Matchmaking-Zeiten länger als erwartet sind, sollten Sie erwägen, eine separate Warteschlange pro Plattform mit einer plattformübergreifenden Warteschlange zu erstellen, je nach Bedarf, um Crossplay zu unterstützen.

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

Host-/Sucher- oder rollenbasierte Anforderungen

PlayFab Match verwendet ein ticketbasiertes Abgleichssystem, bei dem ein Spielhost nicht im Voraus ausgewählt wird. Es kann jedoch ein Hostsuchsystem emulieren, indem ein MatchTotalRule verwendet wird, um die Anzahl der in einer Übereinstimmung zulässigen Hosts zu begrenzen.

Tickets können dann im Voraus angeben, ob es sich um einen Host handelt, indem 1 angegeben wird. Jede Übereinstimmung muss genau einen Host enthalten.

Notiz

Wenn die Anzahl der Hosts die Sucher erheblich übertrifft oder umgekehrt, kann dies zu langsamen Matchmaking-Zeiten für alle Spieler führen. Berücksichtigen Sie die Auswirkungen Ihres Matchmaking-Designs, um sicherzustellen, dass genügend Spieler in einer bestimmten Teilpopulation vorhanden sind, um Ihre Matchmaking-Regeln und die gewünschte durchschnittliche Spielzeit zu erfüllen.

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

Spiele können Rollenanforderungen haben – für instance erfordert ein Spiel möglicherweise einen Schlagzeuger, zwei Gitarristen und einen Sänger. Oder ein Tank, zwei DPS und eine Unterstützung. Spiele können verwenden MatchTotalRule , um diese Rollen wie unten dargestellt zu erfordern.

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

Regeln mit unterschiedlicher Wichtigkeit

Regeln führen die Matchmaking durch einschränken, welche Tickets mit einem anderen übereinstimmen können, und indem die Reihenfolge ausgewählt wird, in der diese Tickets ausgewählt werden. Wenn mehrere Regeln vorhanden sind, werden alle zugehörigen Einschränkungen berücksichtigt. Ein Titel möchte jedoch der Präferenz einer Regel vorrang vor den verbleibenden berechtigten Tickets geben.

Im folgenden Beispiel muss ein Spieler innerhalb einer Qualifikations- und Erfahrungsstufe liegen. Wenn es jedoch viele Tickets innerhalb der festgelegten Qualifikations- und Erfahrungsgrenzen gibt, bevorzugt diese Warteschlange diejenigen, die sich näher an der Qualifikation befinden, gegenüber denen, die sich näher an der Erfahrungsebene befinden.

Qualifikationsunterschiede werden bei der Bewertung der Tickets, die die Einschränkungen erfüllt haben, dreimal so hoch wie Erfahrungsunterschiede gezählt.

"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-Pakete

Bei verschiedenen DLC-Paketen können spieler sich dafür entscheiden, nur andere Spieler zu finden, die über einen passenden DLC verfügen SetIntersectionRule. Jeder Spieler übergibt die DLC-Pakete, die er besitzt, und ein Spiel erfordert, dass eine Gruppe mindestens ein DLC-Paket teilt.

Notiz

Nach 30 Sekunden wird die Regel optional, sodass Spieler spielen können, ohne DLC zu teilen.

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

Aktivieren von Statistiken

Wenn Sie Statistiken aktivieren, kann Ihr Titel Informationen zu einer Warteschlange anzeigen. Diese Informationen können hilfreich sein, um die Erwartungen der Spieler festzulegen, wenn sie einen Spielmodus auswählen, den sie spielen möchten.

Umgekehrt möchten Titel diese Informationen möglicherweise ausblenden – entweder für Business Intelligence-Zwecke oder um zu vermeiden, dass Spieler in Warteschlangen mit hohem Datenverkehr gelangen.

Die folgende Warteschlange ermöglicht sowohl die Möglichkeit, die Anzahl der in einer Warteschlange anwesenden Spieler zu sehen, als auch die geschätzte Zeit, die ein Ticket für die Übereinstimmung benötigt.

Notiz

Ein Server kann diese Informationen immer abrufen. Die unten gezeigte Konfiguration steuert nur, ob Benutzer auch diesen Aufruf tätigen dürfen.

"MatchmakingQueue": {
    "Name": "StatisticsEnabledQueue",
    "MinMatchSize": 8,
    "MaxMatchSize": 8,
    "ServerAllocationEnabled": false,
    "Rules": [],
    "StatisticsVisibilityToPlayers": {
        "ShowNumberOfPlayersMatching": true,
        "ShowTimeToMatch": true
    }
}