Füllt bestehende Spiele auf mit FlexMatch - Amazon GameLift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Füllt bestehende Spiele auf mit FlexMatch

Match-Backfill nutzt Ihre FlexMatch-Mechanismen, um neue Spieler für vorhandene zugeordnete Spielesitzungen zu finden. Du kannst zwar jederzeit Spieler zu jedem Spiel hinzufügen (siehe Einen Spieler zu einer Spielsitzung hinzufügen), aber mit dem Auffüllen von Matches wird sichergestellt, dass neue Spieler dieselben Spielkriterien erfüllen wie aktuelle Spieler. Darüber hinaus ordnet das Match-Backfill die neuen Spieler den Teams zu, verwaltet die Spielerakzeptanz und sendet aktualisierte Spielinformationen an den Spieleserver. Weitere Informationen zu Match-Backfill finden Sie in FlexMatchMatchmaking-Prozess.

Anmerkung

FlexMatchBackfill ist derzeit nicht für Spiele verfügbar, die Echtzeitserver verwenden.

Es gibt zwei Arten von Backfill-Mechanismen:

  • Zur Füllung von Spielesitzungen, die mit weniger als den maximal zulässigen Spielern beginnen; aktivieren Sie hierzu automatisches Backfill.

  • Zur Ersetzung von Spielern, die eine laufende Spielesitzung verlassen; ergänzen Sie hierzu Ihren Spieleserver mit Funktionalität zum Senden von Backfill-Anforderungen.

Automatisches Auffüllen einschalten

Beim automatischen Auffüllen von Spielen löst Amazon GameLift automatisch eine Reservierungsanfrage aus, wenn eine Spielsitzung mit einem oder mehreren unbesetzten Spielerplätzen beginnt. Diese Funktion ermöglicht es, Spiele zu starten, sobald die Mindestanzahl passender Spieler zustande gekommen ist, und die verbleibenden Plätze später zu besetzen, wenn zusätzliche Spieler zugeordnet werden. Sie können das automatische Backfill jederzeit stoppen.

Betrachten Sie als Beispiel ein Spiel, das sechs bis zehn Spieler enthalten kann. FlexMatchsucht zunächst sechs Spieler, bildet das Match und startet eine neue Spielsitzung. Beim automatischen Backfill kann die neue Spielesitzung sofort vier weitere Spieler anfordern. Je nach Spielstil möchten wir möglicherweise neuen Spielern die Möglichkeit geben, während der Spielsitzung jederzeit beizutreten. Oder möglicherweise möchten wir das automatische Backfill nach der Ersteinrichtungsphase und vor Beginn des Gameplays stoppen.

Um automatisches Backfill zu Ihrem Spiel hinzufügen zu können, müssen Sie die folgenden Updates an Ihrem Spiel vornehmen.

  1. Aktivieren Sie automatisches Backfill. Automatisches Backfill wird in einer Matchmaking-Konfiguration verwaltet. Wenn diese Option aktiviert ist, wird es für alle Matching-Spielsitzungen verwendet, die mit diesem Matchmaker erstellt wurden. Amazon GameLift beginnt mit der Generierung von Backfill-Anfragen für eine nicht vollständige Spielsitzung, sobald die Spielsitzung auf einem Spieleserver gestartet wird.

    Um automatisches Backfill zu aktivieren, öffnen Sie eine Match-Konfiguration und legen Sie als Match-Backfill-Modus „AUTOMATIC“ fest. Weitere Informationen finden Sie unter Erstellen Sie eine Matchmaking-Konfiguration.

  2. Schalten Sie die Backfill-Priorisierung ein. Passen Sie Ihren Matchmaking-Prozess an, um das Ausfüllen von Backfill-Anfragen zu priorisieren, bevor Sie neue Matches erstellen. Füge deinem Matchmaking-Regelsatz eine Algorithmuskomponente hinzu und setze die Backfill-Priorität auf „hoch“. Weitere Details finden Sie unter Passen Sie den Match-Algorithmus an.

  3. Aktualisieren Sie die Spielsitzung mit neuen Matchmaker-Daten. Amazon GameLift aktualisiert Ihren Spielserver mithilfe der Server-SDK-Callback-Funktion mit Spielinformationen onUpdateGameSession (siehe Serverprozess initialisieren). Fügen Sie Ihrem Spieleserver Code hinzu, um aktualisierte Spielsitzungsobjekte als Folge der Backfill-Aktivität verarbeiten zu können. Weitere Informationen finden Sie unter Aktualisiere die Spieldaten auf dem Spielserver.

  4. Deaktivieren Sie automatisches Backfill für eine Spielsitzung. Sie können sich jederzeit während einer einzelnen Spielsitzung gegen automatisches Backfill entscheiden. Um das automatische Auffüllen zu beenden, fügen Sie Code zu Ihrem Spielclient oder Spieleserver hinzu, um den GameLift Amazon-API-Aufruf StopMatchmakingdurchzuführen. Dieser Aufruf erfordert eine Ticket-ID. Verwenden Sie die Backfill-Ticket-ID aus der neuesten Backfill-Anforderung. Sie erhalten diese Informationen aus den Spielsitzung-Matchmaking-Daten, die wie im vorherigen Schritt beschrieben aktualisiert werden.

Backfill-Anfragen senden (von einem Spieleserver)

Sie können Match-Backfill-Anforderungen direkt von dem Spielserverprozess aus initiieren, der die Spielsitzung hostet. Der Serverprozess enthält die meisten up-to-date Informationen über aktuelle Spieler, die mit dem Spiel verbunden sind, und den Status leerer Spielerplätze.

In diesem Thema wird davon ausgegangen, dass Sie bereits die notwendigen FlexMatch-Komponenten erstellt und erfolgreich Matchmaking-Prozesse zu Ihrem Spieleserver und einem clientseitigen Spieleservice hinzugefügt haben. Weitere Details zur Einrichtung von FlexMatch finden Sie unter FlexMatchIntegration mit GameLift Amazon-Hosting.

Um Match-Backfill für Ihr Spiel zu ermöglichen, fügen Sie die folgenden Funktionen hinzu:

Wie bei anderen Serverfunktionen verwendet ein Spieleserver das Amazon GameLift Server SDK. Dieses SDK ist in C++ und C# verfügbar.

Um Match-Backfill-Anforderungen von Ihrem Spielserver zu erstellen, führen Sie die folgenden Aufgaben aus.

  1. Lösen Sie eine Match-Backfill-Anforderung aus. Normalerweise wollen Sie eine Backfill-Anforderung auslösen, wenn ein passendes Spiel einen oder mehrere leere Spieler-Slots hat. Sie können Backfill-Anforderungen an bestimmte Umstände knüpfen, z. B. um kritische Rollen zu besetzen oder Teams auszugleichen. Wahrscheinlich möchten Sie auch die Backfilling-Aktivität auf der Grundlage des Alters einer Spielsitzung einschränken.

  2. Erstellen Sie eine Backfill-Anforderung. Fügen Sie Code hinzu, um Match-Backfill-Anforderungen zu erstellen und an einen FlexMatch-Matchmaker zu senden. Backfill-Anforderungen werden über diese Server-APIs abgewickelt:

    Um eine Backfill-Anforderung zu erstellen, rufen Sie StartMatchBackfill mit den folgenden Informationen auf. Um eine Backfill-Anforderung abzubrechen, rufen Sie StopMatchBackfill mit der Ticket-ID der Backfill-Anforderung auf.

    • Ticket-ID — Geben Sie eine Matchmaking-Ticket-ID an (oder entscheiden Sie sich dafür, diese automatisch generieren zu lassen). Mit demselben Mechanismus können Sie Ticket-IDs sowohl für Matchmaking-Anforderungen als auch für Backfill-Anforderungen vergeben. Tickets für Matchmaking und Backfilling werden auf die gleiche Weise verarbeitet.

    • Matchmaker — Identifizieren Sie, welcher Matchmaker für die Backfill-Anfrage verwendet werden soll. Im Allgemeinen werden Sie den gleichen Matchmaker verwenden wollen, der auch für die Erstellung des ursprünglichen Matchs verwendet wurde. Diese Anforderung nimmt eine Matchmaking-Konfiguration-ARN entgegen. Diese Informationen werden im Spielesitzungsobjekt (GameSession) gespeichert, das dem Serverprozess von Amazon GameLift bei der Aktivierung der Spielsitzung zur Verfügung gestellt wurde. Der Matchmaking-Konfiguration-ARN ist in der Eigenschaft MatchmakerData enthalten.

    • ARN der Spielsitzung — Identifizieren Sie die Spielsitzung, die überfüllt ist. Du kannst den ARN der Spielesitzung abrufen, indem du die Server-API GetGameSessionId() aufrufst. Während des Matchmaking-Prozesses haben Tickets für neue Anfragen keine Spielsitzungs-ID, während Tickets für Backfill-Anforderungen eine solche besitzen. Das Vorhandensein der Sitzungs-ID ist ein Weg, um den Unterschied zwischen Tickets für neue Spiele und Tickets für Backfills zu erkennen.

    • Spielerdaten — Füge Spielerinformationen (Spieler) aller aktuellen Spieler in die Spielsitzung ein, die du auffüllen möchtest. Diese Informationen ermöglichen es dem Matchmaker, die bestmöglichen Spiele für die Spieler zu finden, die sich gerade in der Spielsitzung befinden. Sie müssen die Teammitgliedschaft für jeden Spieler angeben. Geben Sie kein Team an, wenn Sie Backfill nicht verwenden. Wenn Ihr Spielserver den Verbindungsstatus des Spielers korrekt gemeldet hat, sollten Sie diese Daten wie folgt erfassen können:

      1. Der Serverprozess, der die Spielsitzung hostet, sollte die meisten up-to-date Informationen darüber enthalten, welche Spieler gerade mit der Spielsitzung verbunden sind.

      2. Um Spieler-IDs, Attribute und Teamzuweisungen abzurufen, rufen Sie Spielerdaten aus dem Spielsitzungsobjekt (GameSession), der MatchmakerData Eigenschaft ab (sieheArbeiten Sie mit Matchmaker-Daten). Die Matchmaker-Daten umfassen alle Spieler, die der Spielsitzung zugeordnet wurden, sodass Sie die Spielerdaten nur für die aktuell verbundenen Spieler abrufen müssen.

      3. Sammeln Sie neue Latenzwerte von allen aktuellen Spielern und fügen Sie diese in jedes Player-Objekt ein, wenn der Matchmaker Latenzdaten anfordert. Wenn Latenzdaten weggelassen werden und der Matchmaker eine Latenzregel hat, wird die Anfrage nicht erfolgreich zugeordnet. Backfill-Anforderungen erfordern Latenzdaten nur für die Region, in der sich die Spielsitzung gerade befindet. Sie können die Region einer Spielsitzung aus der GameSessionId-Eigenschaft des GameSession-Objekts abrufen. Dieser Wert ist ein ARN, der die Region enthält.

  3. Verfolgen Sie den Status einer Backfill-Anfrage. Amazon GameLift informiert Ihren Gameserver mithilfe der Server-SDK-Callback-Funktion über den Status von Backfill-Anfragen onUpdateGameSession (siehe Serverprozess initialisieren). Füge Code für die Verarbeitung der Statusmeldungen — sowie der aktualisierten Spielsitzungsobjekte als Ergebnis erfolgreicher Backfill-Anfragen — unter hinzu. Aktualisiere die Spieldaten auf dem Spielserver

    Ein Matchmaker kann jeweils nur eine Match-Backfill-Anforderung aus einer Spielsitzung verarbeiten. Wenn Sie eine Anfrage stornieren müssen, rufen Sie StopMatchBackfill() an. Wenn Sie eine Anforderung ändern müssen, rufen Sie StopMatchBackfill auf und senden Sie dann eine aktualisierte Anforderung.

Backfill-Anfragen senden (von einem Kundendienst)

Als Alternative zum Senden von Backfill-Anforderungen von einem Spielserver können Sie diese auch von einem clientseitigen Spieleservice aus versenden. Um diese Option zu nutzen, muss der clientseitige Service Zugriff auf aktuelle Daten zur Aktivität der Spielsitzungen und zu den Spielerverbindungen haben. Wenn Ihr Spiel einen Sitzungsverzeichnisdienst verwendet, könnte dies eine gute Wahl sein.

In diesem Thema wird davon ausgegangen, dass Sie bereits die notwendigen FlexMatch-Komponenten erstellt und erfolgreich Matchmaking-Prozesse zu Ihrem Spieleserver und einem clientseitigen Spieleservice hinzugefügt haben. Weitere Details zur Einrichtung von FlexMatch finden Sie unter FlexMatchIntegration mit GameLift Amazon-Hosting.

Um Match-Backfill für Ihr Spiel zu ermöglichen, fügen Sie die folgenden Funktionen hinzu:

Wie bei anderen Client-Funktionen verwendet ein clientseitiger Spieledienst das AWS SDK mit GameLift Amazon-API. Das SDK ist in C++, C # und mehreren anderen Sprachen erhältlich. Eine allgemeine Beschreibung der Client-APIs finden Sie in der Amazon GameLift Service API-Referenz, in der die Low-Level-Service-API für GameLift Amazon-bezogene Aktionen beschrieben wird und Links zu sprachspezifischen Referenzhandbüchern enthält.

Um einen clientseitigen Spieleservice einzurichten, mit dem Sie ein Backfill für Spiele durchführen können, führen Sie die folgenden Aufgaben aus.

  1. Lösen Sie eine Anforderung für das Backfilling aus. Normalerweise löst ein Spiel eine Backfill-Anforderung aus, wenn ein passendes Spiel einen oder mehrere leere Spieler-Slots hat. Sie können Backfill-Anforderungen an bestimmte Umstände knüpfen, z. B. um kritische Rollen zu besetzen oder Teams auszugleichen. Wahrscheinlich möchten Sie auch das Backfilling auf der Grundlage des Alters einer Spielsitzung einschränken. Unabhängig vom Auslöser benötigen Sie mindestens die folgenden Informationen. Du kannst diese Informationen aus dem Spielesitzungsobjekt (GameSession) abrufen, indem du es DescribeGameSessionsmit einer Spielsitzungs-ID aufrufst.

    • Anzahl der momentan leeren Spieler-Slots. Dieser Wert kann aus dem maximalen Spielerlimit einer Spielsitzung und der aktuellen Spieleranzahl berechnet werden. Die aktuelle Spieleranzahl wird aktualisiert, wenn Ihr Gameserver den GameLift Amazon-Dienst kontaktiert, um eine Verbindung zu einem neuen Spieler zu überprüfen oder um einen verlassenen Spieler zu melden.

    • Creation policy (Erstellungsrichtlinie). Diese Einstellung gibt an, ob die Spielsitzung im Moment neue Spieler akzeptiert.

    Das Spielsitzungsobjekt enthält weitere potenziell nützliche Informationen, darunter die Startzeit der Spielsitzung, benutzerdefinierte Spieleigenschaften und Matchmaker-Daten.

  2. Erstellen Sie eine Backfill-Anforderung. Fügen Sie Code hinzu, um Match-Backfill-Anforderungen zu erstellen und an einen FlexMatch-Matchmaker zu senden. Backfill-Anforderungen werden über diese Client-APIs abgewickelt:

    Um eine Backfill-Anforderung zu erstellen, rufen Sie StartMatchBackfill mit den folgenden Informationen auf. Eine Backfill-Anforderung ähnelt einer Matchmaking-Anforderung (siehe Matchmaking für Spieler anfragen), identifiziert aber auch die bestehende Spielsitzung. Um eine Backfill-Anforderung abzubrechen, rufen Sie StopMatchmaking mit der Ticket-ID der Backfill-Anforderung auf.

    • Ticket-ID — Geben Sie eine Matchmaking-Ticket-ID an (oder entscheiden Sie sich dafür, diese automatisch generieren zu lassen). Mit demselben Mechanismus können Sie Ticket-IDs sowohl für Matchmaking-Anforderungen als auch für Backfill-Anforderungen vergeben. Tickets für Matchmaking und Backfilling werden auf die gleiche Weise verarbeitet.

    • Matchmaker — Identifizieren Sie den Namen einer zu verwendenden Matchmaking-Konfiguration. Im Allgemeinen werden Sie den gleichen Matchmaker verwenden wollen, der auch für die Erstellung des ursprünglichen Matchs verwendet wurde. Diese Information befindet sich in einem Spielsitzungsobjekt (GameSession), einer MatchmakerData Eigenschaft, unter dem Matchmaking-Konfigurations-ARN. Der Namenswert ist die Zeichenkette, die auf ""matchmakingconfiguration/" folgt. (Im ARN-Wert "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4" ist der Matchmaking-Configuration-Name z. B. "MM-4v4".)

    • Spielesitzungs-ARN — Geben Sie die Spielsitzung an, die aufgefüllt werden soll. Verwenden Sie die GameSessionId-Eigenschaft des Spielsitzungsobjekts. Diese ID verwendet den ARN-Wert, den Sie benötigen. Matchmaking-Tickets (MatchmakingTicket) für Backfill-Anfragen haben während der Bearbeitung die Spielsitzungs-ID; Tickets für neue Matchmaking-Anfragen erhalten keine Spielsitzungs-ID, bis das Spiel platziert ist; das Vorhandensein einer Sitzungs-ID im Spiel ist eine Möglichkeit, den Unterschied zwischen Tickets für neue Spiele und Tickets für Backfills zu erkennen.

    • Spielerdaten — Füge Spielerinformationen (Spieler) aller aktuellen Spieler in die Spielsitzung ein, die du auffüllen möchtest. Diese Informationen ermöglichen es dem Matchmaker, die bestmöglichen Spiele für die Spieler zu finden, die sich gerade in der Spielsitzung befinden. Sie müssen die Teammitgliedschaft für jeden Spieler angeben. Geben Sie kein Team an, wenn Sie Backfill nicht verwenden. Wenn Ihr Spielserver den Verbindungsstatus des Spielers korrekt gemeldet hat, sollten Sie diese Daten wie folgt erfassen können:

      1. Rufen Sie DescribePlayerSessions() mit der Spielsitzungs-ID auf, um alle Spieler zu ermitteln, die derzeit mit der Spielsitzung verbunden sind. Jede Spielersitzung umfasst eine Spieler-ID. Sie können einen Statusfilter hinzufügen, um nur aktive Spielersitzungen abzurufen.

      2. Ruft Spielerdaten aus dem Spielsitzungsobjekt ab (GameSession), MatchmakerData Eigenschaft (sieheArbeiten Sie mit Matchmaker-Daten. Verwenden Sie die im vorherigen Schritt abgerufenen Spieler-IDs, um Daten nur für die aktuell verbundenen Spieler zu erhalten. Da die Matchmaker-Daten beim Ausscheiden von Spielern nicht aktualisiert werden, müssen Sie die Daten der aktuellen Spieler extrahieren.

      3. Sammeln Sie neue Latenzwerte von allen aktuellen Spielern und fügen Sie diese in das Player-Objekt ein, wenn der Matchmaker Latenzdaten anfordert. Wenn Latenzdaten weggelassen werden und der Matchmaker eine Latenzregel hat, wird die Anfrage nicht erfolgreich zugeordnet. Backfill-Anforderungen erfordern Latenzdaten nur für die Region, in der sich die Spielsitzung gerade befindet. Sie können die Region einer Spielsitzung aus der GameSessionId-Eigenschaft des GameSession-Objekts abrufen. Dieser Wert ist ein ARN, der die Region enthält.

  3. Verfolgen Sie den Status einer Backfill-Anforderung. Fügen Sie Code hinzu, um den Status von Matchmaking-Tickets zu überprüfen. Sie können den eingerichteten Mechanismus verwenden, um Tickets für neue Matchmaking-Anforderungen zu verfolgen (siehe Verfolgen Sie Matchmaking-Events), indem Sie die Ereignisbenachrichtigung (empfohlen) oder das Polling nutzen. Obwohl Sie keine Spielerakzeptanz-Aktivität mit Backfill-Anforderungen auslösen müssen und die Spielerinformationen auf dem Spielserver aktualisiert werden, müssen Sie dennoch den Ticketstatus überwachen, um Anforderungsfehler und Neusendungen zu verarbeiten.

    Ein Matchmaker kann jeweils nur eine Match-Backfill-Anforderung aus einer Spielsitzung verarbeiten. Wenn Sie eine Anforderung abbrechen möchten, rufen Sie StopMatchmaking auf. Wenn Sie eine Anforderung ändern müssen, rufen Sie StopMatchmaking auf und senden Sie dann eine aktualisierte Anforderung.

    Sobald eine Match-Backfill-Anforderung erfolgreich ist, erhält Ihr Spielserver ein aktualisiertes GameSession-Objekt und übernimmt die Aufgaben, die erforderlich sind, um neue Spieler in die Spielsitzung einzubinden. Weitere Informationen finden Sie unter Aktualisiere die Spieldaten auf dem Spielserver.

Aktualisiere die Spieldaten auf dem Spielserver

Unabhängig davon, wie Sie Backfill-Anfragen für Matches in Ihrem Spiel initiieren, muss Ihr Gameserver in der Lage sein, die Aktualisierungen der Spielsitzung zu verarbeiten, die Amazon aufgrund von Anfragen zum Auffüllen von Matches GameLift bereitstellt.

Wenn Amazon eine Match-Backfill-Anfrage GameLift abschließt — erfolgreich oder nicht —, ruft es Ihren Gameserver mithilfe der Callback-Funktion an. onUpdateGameSession Dieser Aufruf hat drei Eingabeparameter: eine Spiel-Backfill-Ticket-ID, eine Statusmeldung und ein GameSession Objekt, das die meisten up-to-date Matchmaking-Daten einschließlich Spielerinformationen enthält. Im Rahmen Ihrer Spielserver-Integration müssen Sie den folgenden Code zu Ihrem Spielserver hinzufügen:

  1. Implementieren Sie die onUpdateGameSession-Funktion. Diese Funktion muss in der Lage sein, die folgenden Statusmeldungen (updateReason) zu verarbeiten:

    • MATCHMAKING_DATA_UPDATED — Neue Spieler wurden erfolgreich der Spielsitzung zugeordnet. Das GameSession-Objekt enthält aktualisierte Matchmaker-Daten, einschließlich Spielerdaten zu bestehenden Spielern und neu hinzugekommenen Spielern.

    • BACKFILL_FAILED — Der Versuch, das Spiel aufzufüllen, ist aufgrund eines internen Fehlers fehlgeschlagen. Das GameSession-Objekt bleibt unverändert.

    • BACKFILL_TIMED_OUT — Der Matchmaker konnte innerhalb des Zeitlimits kein Backfill-Match finden. Das GameSession-Objekt bleibt unverändert.

    • BACKFILL_CANCELLED — Die Match-Backfill-Anfrage wurde durch einen Aufruf an StopMatchmaking (Client) oder (Server) storniert. StopMatchBackfill Das GameSession-Objekt bleibt unverändert.

  2. Für erfolgreiche Backfill-Matches verwenden Sie die aktualisierten Matchmaker-Daten, um die neuen Spieler zu verarbeiten, wenn sie sich mit der Spielsitzung verbinden. Sie müssen mindestens die Teamzuweisungen für den/die neuen Spieler sowie andere Spielerattribute verwenden, die erforderlich sind, um den Spieler in das Spiel aufzunehmen.

  3. Füge beim Aufruf der Server-SDK-Aktion ProcessReady() deines Gameservers den Namen der onUpdateGameSession Callback-Methode als Prozessparameter hinzu.