Comment ajouter un système de matchmaking à un jeu de Battle Royale

Principales informations

Principales informations

Principales informations

Le matchmaker d'Edgegap est un système de matchmaking entièrement géré et infiniment personnalisable qui regroupe de manière optimale les joueurs du monde entier – et son utilisation est gratuite pendant le développement de votre jeu multijoueur, Battle Royale.

C'est également le seul système de matchmaking (à notre connaissance) avec des règles de matchmaking basées sur la latence pour fournir l'expérience multijoueur en ligne idéale pour votre jeu, quel que soit le moteur (Unity, Unreal, etc.) ou les services de jeu (EOS, UGS, PlayFab, Heroic Labs Nakama, Braincloud, etc.).

Comme notre matchmaker est basé sur des paramètres, il n'est pas nécessaire d'écrire du code. L'intégration est donc très facile et si nécessaire, nos guides d'intégration vous accompagnent à chaque étape du processus.

Lorsque votre jeu est en ligne, comme notre système de matchmaking est entièrement géré, vous n'avez pas besoin de gérer l'infrastructure, les bugs, les pannes, la scalabilité ou la gestion de la base de données. Nous nous occupons de tout pour vous, réduisant ainsi votre charge de travail DevOps à presque zéro.

Comment intégrer le matchmaking dans votre jeu de Battle Royale

-> Cet article est basé sur la documentation sur le matchmaking. Si vous rencontrez des problèmes ou des incohérences, veuillez vous assurer de vous référer au guide original, car ils sont maintenus plus fréquemment à jour.

L'exemple suivant vous aidera à tester le flux de joueur central de matchmaking , à savoir :

Il y a cinq étapes pour intégrer notre matchmaking à votre jeu :

  1. La première étape consiste à créer un compte et à utiliser notre exemple de jeu BR. Voilà, vous avez (techniquement) fait la moitié du chemin ! Vous n'auriez qu'à intégrer le matchmaking dans votre jeu (voir étape 5).

  2. Maintenant, vous ne devriez jamais suivre aveuglément un exemple JSON que vous avez trouvé sur Internet, et il est donc fortement recommandé d'adapter les règles ci-dessus à votre jeu. L'étape 2 (“Explorer la Configuration”) est notre “comment lire” qui explique la fonction de chaque règle de matchmaking.

  3. L'étape 3 (“Examiner les Détails de l'Instance”) couvre votre matchmaker personnel et spécifique afin de garantir qu'il est déployé et fonctionne avec la conception de votre jeu.

  4. L'étape 4, comme son nom l'indique (“4. Tester l'API des Tickets”), concerne les tests des demandes de matchmaking des joueurs reçues par le matchmaking, appelées tickets.

  5. L'étape 5 (“Intégrer le Matchmaking dans votre Jeu”) souligne comment intégrer le matchmaking dans le projet de votre moteur.

Si vous avez des défis de dépannage, notre Centre d'Apprentissage approfondi a des conseils supplémentaires de dépannage.

1. Configurer le Niveau Gratuit

Inscrivez-vous pour votre compte Edgegap gratuit, et naviguez vers la page du tableau de bord du Matchmaker.

À partir de là, cliquez d'abord sur Créer un Matchmaker ensuite, saisissez :

  • Un nom pour votre matchmaker – qui est purement pour votre propre référence, par ex.  quickstart-dev,

  • Ensuite, téléchargez l'exemple simple suivant comme configuration JSON ci-dessous pour votre jeu BR :

{
  "version": "1.0.0",
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "casual-example": {
      "application": {
        "name": "my-game-server=>CHANGE-THIS-NAME-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANGE-THIS-HERE "
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 1
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "10": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "30": {
            "beacons": {
              "difference": 50
            }
          },
          "60": {
            "league_rank": {
              "max_difference": 2
            }
          },
          "180": {
            "beacons": {
              "difference": 100,
              "max_latency": 500
            }
          }
        }
      }
    },
    "competitive-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 0
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "60": {
            "beacons": {
              "difference": 50
            }
          },
          "180": {
            "beacons": {
              "max_latency": 250
            }
          }
        }
      }
    },
    "challenger-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 0
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "180": {
            "beacons": {
              "difference": 50
            }
          },
          "240": {
            "beacons": {
              "max_latency": 250
            }
          }
        }
      }
    }
  }
}

(petit rappel de bien changer le nom d'application name et version afin qu'ils correspondent à votre Application et Versions!)

S'il n'y a pas d'erreurs de validation, cliquez sur Créer et Démarrer et attendez que le processus se termine. Cela aura pour résultat le démarrage d'un nouveau cluster gratuit, avec votre matchmaker d'exemple simple.

Vous pouvez maintenant passer à l'étape suivante.

2. Explorer la Configuration

Règles de Jeu BR Uniques

Spécifiquement pour les jeux de Battle Royale, vous pouvez définir plusieurs Profils de Matchmaking pour des règles et des paramètres spécifiques aux modes de jeu :

  • restreindre le classement dans une différence entre deux joueurs pour des jeux plus décontractés,

  • restreindre la différence de classement pour n'autoriser que des adversaires du même classement pour les jeux classés,

  • laisser les joueurs indiquer leurs préférences de carte et choisir une carte adaptée à tous,

  • ajouter UI de Sélection de Hub pour restreindre les adversaires aux Balises de Ping spécifiées,

  • restreindre la latence de matchmaking à un seuil maximum pour éviter de faire correspondre les joueurs éloignés,

  • restreindre la latence de matchmaking à une différence maximale pour maximiser l'équité de ping,

  • allouer plus de CPU ou de mémoire en utilisant différentes Versions d'App quand plus de joueurs sont autorisés,

  • Rejoindre en Groupe pour des lobbies préfabriqués ou pour remplir des équipes sans dépasser les tailles d'équipe.

Commencez avec les conditions idéales, et élargissez les restrictions pour garantir des matchs rapides :

  • relâchez progressivement les restrictions de latence avec le temps pour trouver plus de joueurs,

  • augmentez progressivement la différence de classement autorisée pour trouver plus de joueurs,

  • augmentez le temps entre les expansions pour les niveaux les plus élevés (challengeurs), car moins de joueurs sont disponibles.

Créez des tickets avec un classement plus élevé pour les matchs de promotion, afin de correspondre à des adversaires plus difficiles.

Définir des profils de tricheurs séparés pour s'assurer que les tricheurs signalés ou les joueurs ayant un grand nombre de rapports de modération n'impactent pas négativement l'expérience des joueurs légitimes dans les matchs classés.

Versionnement Sémantique

Chaque nouvelle version utilise le Versionnement Sémantique pour communiquer clairement l'impact des changements en interprétant le format major.minor.patch :

  • les versions majeures incluent des changements de rupture et nécessitent un examen d'intégration,

  • les versions mineures inclusent des améliorations substantielles compatibles avec les versions précédentes,

  • les versions patch incluent des corrections de bogues et de petites améliorations.

Certaines déploiements peuvent entraîner des erreurs. Nous tentons de résoudre cela en réessayant le déploiement jusqu'à max_deployment_retry_count fois automatiquement (sans confirmation du client).

Pour garantir que des plantages inattendus du client ou des tickets abandonnés ne persistent pas et n'occupent pas vos ressources de matchmaking, les tickets seront annulés après ticket_expiration_period ce qui entraînera le changement de leur statut en ANNULÉ et ensuite définitivement supprimés après ticket_removal_period.

Le cœur de notre logique de matchmaking est configuré dans Profils de Matchmaking. Chaque profil est une file d'attente de matchmaking complètement isolée, pointant vers les Versions d'App avec un montant pré-défini de ressources CPU et mémoire (RAM) requises.

Les Règles de Matchmaking dans l'ensemble initial des règles doivent être satisfaites pour que les joueurs soient regroupés, chaque règle étant définie par trois propriétés :

  • nom de votre choix, par ex. - taille de match,

  • type de règle, également connu sous le nom d'opérateur, par ex. - nombre_de_joueurs,

  • et enfin les attributs de l'opérateur, par ex. nombre_de_groupes ou taille_de_groupe.

Règle de Nombre de Joueurs

C'est une règle spéciale définissant combien de joueurs doivent correspondre pour initier l'attribution :

  • nombre_de_groupes fait référence au nombre d'équipes, 1 équipe peut être utilisée pour les modes coopératifs ou free-for-all,

  • taille_de_groupe fait référence au nombre de joueurs par équipe.

Notre exemple simple démontre un jeu coopératif avec 2 joueurs.

Veuillez noter que la règle "Nombre de Joueurs" est requise et ne peut être définie qu'une seule fois dans vos règles de configuration initiales.

Règle des Latences

Utilisez cette règle pour fournir le ping le plus bas possible pour tous les joueurs. Une fois que les clients mesurent et soumettent leur temps de trajet aller-retour (ping) contre toutes les balises disponibles, Gen2 ne considérera que les matchs dans une différence spécifique de valeurs de ping, mesurée contre les Balises de Ping. Cela présente une solution “douce” pour diviser votre base de joueurs, permettant de faire correspondre avec des régions voisines, améliorant ainsi la vitesse des matchs pour les régions moins peuplées. Utilisez max_latencypour empêcher le matching avec des joueurs situés loin.

Vous pouvez maintenant passer à l'étape suivante.

Notre exemple de règle balises ci-dessus avec "différence": 50, "max_latency": 200 initialement :

  • Alice et Bob s'associeront, puisque Pékin est rejeté (>200) et le reste est dans | A-B | < 50 :

    • Alice {Montréal: 12.3, Newark: 45.6, Dallas: 59.9, Pékin: 264.4}; et

    • Bob {Montréal: 27.3, Newark: 32.4, Dallas: 23.1, Pékin: 252.2}.

  • Charlie et Dave ne correspondront pas, puisque | C-D | > 50 pour la balise Dallas :

    • Alice {Montréal: 5.7, Newark: 44.2, Dallas: 59.5, Pékin: 263.2}; et

    • Bob {Montréal: 57.8, Newark: 32.0, Dallas: 24.2, Pékin: 272.3}.

Veuillez noter que les "Règles des Latences" ne peuvent être définies qu'une seule fois dans vos règles de configuration initiales.

3. Examiner les Détails de l'Instance

Examinez les détails de votre nouveau matchmaker dans notre tableau de bord une fois qu'il est initialisé :

Statut indique la santé du service, peut être EN LIGNE, HORS LIGNE, ou ERREUR.

  • Identifiant aide le personnel d'Edgegap à trouver rapidement votre matchmaker si vous avez besoin d'aide pour résoudre des problèmes.

  • Commencé à peut être utile pour retracer le dernier temps de mise à jour.

  • Taille correspond à l'un de nos Niveaux de Tarification.

  • URL de l'API sera utilisée par les Clients de Jeux et les Serveurs de Jeux pour communiquer avec Gen2.

  • URL Swagger est une interface utilisateur de spécification openAPI pratique que nous fournissons pour explorer le schéma API.

  • Token d'Auth est un jeton secret unique utilisé par les Clients de Jeux et le Serveur de Jeux pour l'authentification.

Pour tester votre nouveau matchmaker en utilisant l'API,  vous aurez besoin de l'URL Swagger, de l'URL de l'API et du Token d'Auth.

Vous pouvez maintenant passer à l'étape suivante.

4. Tester l'API des Tickets

Tout d'abord,  ouvrez votre URL Swagger pour inspecter votre schéma openAPI dans l'interface utilisateur de swagger

Cliquez sur l'URL /...swagger.json sous le titre “Matchmaker” pour ouvrir le schéma JSON brut :

Enregistrez cette page en tant que fichier sur votre disque (CTRL/CMD+S).

Ouvrez votre application Postman et connectez-vous à votre compte gratuit.

Importez votre swagger.json fichier de l'étape précédente :

  • garder Collection Postman sélectionnée,

  • séléctionner Afficher les Paramètres d'Importation et changer le paramètre Génération de Paramètres à Exemple.

Confirmez l'importation, cela aura pour résultat l'apparition d'une nouvelle collection dans la liste des Collections à gauche, intitulée Matchmaker.

Voir plus d'actions, ouvrez l'onglet Autorisation et choisissez :

  • Type d'Auth - Clé API,

  • Clé - “Authorization

  • Valeur - insérez ici votre valeur du Token d'Auth,

  • Ajouter à - En-tête.

Appuyez sur (CTRL/CMD+S) ou sur l'icône Enregistrer pour sauvegarder les modifications. Le point orange dans votre onglet Postman devrait disparaître.

Dans votre collection Matchmaker, sélectionnez les tickets et Créez un ticket de matchmaking, ouvrant un nouvel onglet.

Sélectionnez l'onglet Corps pour prévisualiser votre demande de ticket joueur :

remarquez player_ip suscité à null- cela causera d'utiliser automatiquement l'adresse IP ajoutée à votre demande (voir Intégration Serveur à Serveur pour des alternatives),

  • profil fait référence à vos Profils de Matchmaking,

  • attributs incluent des valeurs pour vos règles de matchmaking, dans ce cas pour la règle des latences,

    • la règle nombre_de_joueurs est la seule règle qui ne requiert aucun attribut dans les tickets de joueur.

REMARQUE: Assurez-vous de vous référer à la configuration d'importation de l'échantillon Swagger

Cliquez sur Envoyer et examinez la réponse à votre demande de ticket joueur :

  • id est votre ID de ticket de matchmaking unique, conservez ceci pour vérifier votre ticket plus tard,

  • profil confirmant le choix des Profils de Matchmaking,

  • group_id est un ID de groupe unique attribué à chaque ticket, un joueur solo est représenté comme un groupe de 1,

  • player_ip est l'adresse IP publique résolue du joueur, quelle que soit la méthode d'identification utilisée,

  • assignment est fixé à null pour indiquer que le ticket n'a pas encore été associé ou attribué à un serveur,

  • created_at fournit des informations sur le moment où le ticket joueur a été créé pour l'utilisation de l'interface utilisateur du jeu,

  • status indique l'état actuel du ticket, tous les tickets commencent en RECHERCHER (voir Processus de Matchmaking pour plus de détails).

Créez un deuxième ticket en appuyant à nouveau sur Envoyer, afin que nos deux joueurs correspondent et qu'un serveur soit démarré.

Dans votre collection Matchmaker, sélectionnez {ticketId} et Lire un ticket de matchmaking.

Saisissez l'ID ticket de la réponse de l'étape précédente et cliquez sur Envoyer.

Examinez l'attribution mise à jour pour votre ticket joueur :

  • le statut a changé en MATCH_FOUND d'abord, tout en gardant assignment défini à null pour indiquer que les joueurs se sont associés et qu'un serveur est en cours d'attribution,

Cliquez à nouveau sur Envoyer pour vérifier votre ticket, et examinez l'attribution mise à jour pour votre ticket joueur :

  • le statut a changé en HOST_ASSIGNED avec assignment contenant les détails du serveur attribué.

 Inspectez votre nouveau déploiement dans notre tableau de bord :

  • remarquez que chaque déploiement est étiqueté avec tous les IDs de tickets et le profil pour une traçabilité accrue.

Essayez de vous connecter depuis votre client de jeu au serveur attribué.

Une fois que vous avez vérifié que vous pouvez vous connecter à votre Déploiement sans problèmes et que vous avez terminé les tests, Arrêtez votre Déploiement pour libérer de la capacité dans votre compte pour la prochaine version.

Vous pouvez maintenant passer à l'étape suivante.

5. Intégrer le Matchmaker dans votre Jeu

Le matchmaking d'Edgegap s'intègre :

  • avec Client de Jeu, pour gérer les Tickets de Joueurs,

  • avec Serveur de Jeu, pour :

    • traiter les préférences des joueurs transmises par leurs tickets,

    • en option pour soutenir le Remplissage pour ajouter ou remplacer des joueurs après le démarrage.

Pour le Client de Jeu, nous vous recommandons de fournir des mises à jour de statut de ticket tout au long du Processus de Matchmaking aux joueurs utilisant l'interface utilisateur du jeu pour une meilleure expérience de joueur. Voir :

Dans le Client de Jeu, assurez-vous de gérer les erreurs non réessayables :

  • HTTP 404 Non Trouvé - le ticket a été supprimé,

  • HTTP 500 Erreur Interne du Serveur - panne temporaire du service.

Dans le Serveur de Jeu, traitez les préférences des joueurs et le contexte initial du serveur. Aucune intégration API n'est requise :

  1. Lire Variables d'Environnement Injectées (Gen2) pour récupérer les données de matchmaking initiales des joueurs.

  2. Lire Variables d'Environnement Injectées (Versions d'App) pour les paramètres spécifiques à la version, les paramètres (capacité des joueurs) et les secrets.

  3. Lire Variables d'Environnement Injectées (Déploiement) pour des informations sur le déploiement, telles que l'adresse IP, l'emplacement, etc.

Une fois que les joueurs se connectent, le Serveur de Jeu et les Clients de Jeu démarrent une scène de chargement pour effectuer des étapes de synchronisation (par exemple, sélectionner et charger une carte/scène/niveau). Nous recommandons une scène 3D complète, une interface utilisateur sociale de type lobby, ou un écran de chargement avec une barre de progression, pour indiquer que l'initialisation est en cours.

Une fois que les Clients de Jeu sont entièrement chargés, les joueurs chargent/travaille vers la scène principale du jeu.

En option, le Serveur de Jeu peut créer et gérer le Remplissage et la capacité des joueurs (ajouter ou remplacer des joueurs qui partent).

Assurez-vous que votre déploiement sera correctement arrêté en utilisant l'URL DELETE_INJECTÉE, si :

  • aucun joueur ne rejoint le match,

  • tous les joueurs ont quitté le match,

  • le match se conclut correctement.

Félicitations, vous avez terminé l'intégration du Matchmaker Edgegap ! Si vous souhaitez en savoir plus, lisez tout à ce sujet dans notre Centre d'Apprentissage.

Écrit par

l'équipe Edgegap