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": [
]
}
}
Suche im spielübergreifenden Modus
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 true
festgelegt 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 MatchAny
kö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
}
}