Comment ajouter un système de matchmaking à un jeu MMO

Comment ajouter un système de matchmaking à un jeu MMO
Comment ajouter un système de matchmaking à un jeu MMO
Comment ajouter un système de matchmaking à un jeu MMO

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 décontracté.

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.

Lorsque votre jeu est en ligne, étant donné que notre système de matchmaking est entièrement géré, vous n'avez pas besoin de gérer l'infrastructure, les bogues, les pannes, l'évolutivité ou la gestion de 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 multijoueur MMO

-> 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 mis à jour plus fréquemment.

L'exemple suivant vous aidera à tester le flux principal des joueurs de matchmaking, à savoir :

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

  1. La première étape est de créer un compte et d'utiliser notre exemple de jeu MMO. Voilà, vous êtes (techniquement) à mi-chemin ! Vous n'auriez qu'à intégrer le matchmaking dans votre jeu (voir étape 5).

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

  3. L'étape 3 (“Vérifier les détails de l'instance”) couvre votre matchmaker personnel et spécifique pour s'assurer 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 le test de vos demandes de matchmaking provenant des joueurs par le matchmaker, appelées tickets.

  5. L'étape 5 (“Intégrer le matchmaking dans votre jeu”) met en évidence comment intégrer le matchmaking dans le projet de votre moteur.

Si vous avez des difficultés à résoudre des problèmes, notre Centre d'apprentissage approfondi dispose de conseils supplémentaires pour le dépannage.

1. Configuration du niveau gratuit

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

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

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

  • Ensuite, téléchargez l'exemple simple suivant en tant que configuration JSON ci-dessous pour votre jeu MMO :

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "custom-lobby-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "lobby_id": {
            "type": "string_equality"
          }
        },
        "expansions": {}
      }
    }
  }
}

(rappel amical pour s'assurer de changer le nom et version de l'application pour correspondre à 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 soit terminé. Cela entraînera le démarrage d'un nouveau cluster gratuit, avec votre exemple de matchmaking simple.

Vous pouvez maintenant procéder à l'étape suivante.

2. Explorer la configuration

Règles uniques des jeux multijoueurs MMO

Les lobbies personnalisés (lobbies privés, niveaux de bac à sable) sont une option très populaire pour le multijoueur en canapé, mais aussi pour tester de nouvelles fonctionnalités dans des jeux compétitifs ou coopératifs avant qu'ils n'entrent dans les modes de jeu principaux. Ces jeux nécessitent généralement le moins de restrictions, mais visent à garantir que les joueurs peuvent Rejoindre en groupe.

Les tickets de remplissage peuvent utiliser des profils de lobby personnalisés pour soutenir l'invitation fiable d'amis, tant que les tickets de remplissage sont valides.

  • Astuce : Ajoutez le profil custom-lobby-example à votre configuration en plus de vos autres profils pour soutenir les lobbies personnalisés.

Versionnage sémantique

Alors que nous publions des mises à jour pour le matchmaking, chaque nouvelle version utilise le versionnage sémantique pour communiquer clairement l'impact des changements en interprétant le format majeur.mineur.patch :

  • Les versions majeures incluent des changements critiques et nécessitent un examen de l'intégration,

  • Les versions mineures incluent des améliorations substantielles compatibles en arrière,

  • Les versions patch incluent des corrections de bogues et des améliorations mineures.

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 s'assurer que des pannes inattendues de clients ou des tickets abandonnés ne perdurent pas et n'occupent pas les ressources de votre matchmaker, les tickets seront annulés après ticket_expiration_period ce qui fera changer leur statut en ANNULÉ et seront 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 Versions d'application avec une quantité prédéfinie de ressources CPU et de mémoire (RAM) requises.

Règles de matchmaking dans l'ensemble de règles initiales doivent être respectées pour que les joueurs soient regroupés, chacune définie par trois propriétés :

  • nom de votre choix, par exemple - taille de match,

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

  • et enfin, les attributs d'opérateur, par exemple nombre_d'équipes ou taille_d'équipe.

Règle de nombre de joueurs

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

  • nombre_d'équipes se réfère au nombre d'équipes, 1 équipe peut être utilisée pour les modes coopératifs ou de tous contre tous,

  • taille_d'équipe se réfère 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 tous les beacons disponibles, Gen2 ne considérera que les correspondances dans une différence spécifique des valeurs de ping, mesurée contre Beacons de ping. Cela présente une solution "douce" pour diviser votre base de joueurs, permettant un matchmaking avec des régions voisines, améliorant particulièrement la vitesse de correspondance pour les régions moins peuplées. Utilisez max_latencypour empêcher le matchmaking contre des joueurs situés loin.

Vous pouvez maintenant procéder à l'étape suivante.

Notre exemple de règle de beacons ci-dessus avec "difference": 50, "max_latency": 200 initialement :

  • Alice et Bob vont correspondre, puisque Pékin est écarté (>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 vont pas correspondre, car | C-D | > 50 pour le beacon de 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 Règles de latences ne peuvent être définies qu'une seule fois dans vos règles de configuration initiales.

3. Vérifier les détails de l'instance

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

État 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 le dépannage.

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

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

  • URL de l'API sera utilisée par les clients de jeu et les serveurs de jeu pour communiquer avec Gen2.

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

  • Jeton d'authentification est un jeton secret unique utilisé par les clients de jeu et le serveur de jeu pour l'authentification.

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

Vous pouvez maintenant procéder à 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 en dessous du 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 fichier swagger.json de l'étape précédente :

  • gardez Collection Postman sélectionnée,

  • sélectionnez Voir les paramètres d'importation et changez le paramètre Génération de paramètres en Exemple.

Confirmez l'importation, cela entraînera 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 AuthToken,

  • Ajouter à - En-tête.

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

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

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

remarquez player_ip défini sur null- cela fera que l'adresse IP sera automatiquement ajoutée à votre demande (voir Intégration serveur à serveur pour des alternatives),

  • profil se réfère à vos Profils de matchmaking,

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

    • la règle nombre_de_joueurs est la seule règle qui ne nécessite aucun attribut dans les tickets des joueurs.

REMARQUE : Veuillez vous référer à la configuration d'importation de l'exemple Swagger

Cliquez sur Envoyer et passez en revue la réponse à votre demande de ticket de joueur :

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

  • profil confirmant le choix de 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, indépendamment de la méthode d'identification utilisée,

  • assignment est défini sur null pour indiquer que le ticket n'a pas encore été jumelé ou attribué à un serveur,

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

  • status indique l'état actuel du ticket, tous les tickets commencent dans Recherche (voir Processus de matchmaking pour les détails).

Créez un second ticket en appuyant à nouveau sur Envoyer afin que nos deux joueurs s'accordent et qu'un serveur soit démarré.

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

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

Vérifiez l'attribution mise à jour pour votre ticket de joueur :

  • le statut a changé pour MATCH_FOUND dans un premier temps, tout en gardant assignment défini sur null pour indiquer que les joueurs se sont accordé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 de joueur :

  • le statut a changé pour HOST_ASSIGNED avec assignment contenu de détails sur le serveur attribué.

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

  • remarquez que chaque déploiement est étiqueté avec tous les ID de ticket et profil pour ajouter une traçabilité.

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 le prochain build.

Vous pouvez maintenant procéder à l'étape suivante.

5. Intégrer le matchmaking dans votre jeu

Le matchmaking d'Edgegap s'intègre :

  • avec Client de jeu, pour gérer les tickets des joueurs,

  • avec Serveur de jeu, pour :

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

    • optionnellement pour soutenir le remplissage pour ajouter ou remplacer des joueurs après le démarrage.

Pour un Client de jeu, nous recommandons de fournir des mises à jour de statut des tickets tout au long du Processus de matchmaking aux joueurs à l'aide de l'interface utilisateur du jeu pour la meilleure expérience de joueur. Voir :

Dans Client de jeu, assurez-vous de gérer les erreurs non récupérables :

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

  • HTTP 500 Erreur interne du serveur - panne temporaire du service.

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

  1. Lisez les variables d'environnement injectées (Gen2) pour récupérer les données de matchmaking initiales des joueurs.

  2. Lisez les variables d'environnement injectées (Versions d'application) pour les paramètres spécifiques à la version, les réglages (capacité des joueurs) et les secrets.

  3. Lisez les variables d'environnement injectées (Déploiement) pour les informations sur le déploiement, telles que l'adresse IP, l'emplacement ou autre.

Une fois que les joueurs se connectent, Serveur de jeu et Clients de jeu démarrent une scène de chargement pour effectuer des étapes de synchronisation (par exemple, sélection et chargement d'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 chargeront/se déplaceront vers la scène principale de jeu.

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

Assurez-vous que votre déploiement sera arrêté correctement en utilisant Injected DELETE_URL, si :

  • aucun joueur ne rejoint le match,

  • tous les joueurs ont quitté le match,

  • le match se termine correctement.

Félicitations, vous avez terminé l'intégration du matchmaking Edgegap ! Si vous souhaitez en apprendre davantage, lisez tout à ce sujet dans notre Centre d'apprentissage.

Écrit par

l'équipe Edgegap