Comment ajouter un matchmaking à un jeu multijoueur décontracté

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

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

L'exemple suivant vous aidera à tester le flux de base de matchmaking pour les joueurs, à savoir :

Il y a cinq étapes pour implémenter notre système de matchmaking dans votre jeu :

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

  2. Maintenant, vous ne devez jamais suivre aveuglément un exemple de JSON que vous avez trouvé sur Internet, il est donc fortement recommandé d'adapter les règles ci-dessus à votre jeu 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 (« Revoir les Détails de l'Instance ») couvre votre système de matchmaking spécifique pour garantir qu'il est déployé et fonctionne avec le design de votre jeu.

  4. L'étape 4, comme son nom l'indique (« 4. Tester l'API des Tickets »), concerne essentiellement le test des demandes de matchmaking des joueurs reçues par le système de matchmaking, appelées tickets.

  5. L'étape 5 (« Intégrer le matchmaking dans votre jeu ») met en évidence comment intégrer le système de 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 pour le dépannage.

1. Configurer le niveau gratuit

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

À partir de là, cliquez d'abord sur Créer Matchmaker et entrez :

  • Un nom pour votre système de matchmaking – qui est purement pour votre propre référence, par exemple quickstart-dev,

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

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "social-example": {
      "application": {
        "name": "my-game-server==>CHANGE-THIS",
        "version": "2024.01.30-16.23.00-UTC==>CHANGE-THIS"
      },
      "rules": {
        "initial": {
          "match_size": {
            "attributes": {
              "team_count": 1,
              "team_size": 30
            },
            "type": "player_count"
          },
          "beacons": {
            "attributes": {
              "difference": 80,
              "max_latency": 80
            },
            "type": "latencies"
          },
          "selected_region": {
            "type": "string_equality",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_mode": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "10": {
            "beacons": {
              "difference": 100,
              "max_latency": 100
            },
            "match_size": {
              "team_count": 1,
              "team_size": 20
            }
          },
          "15": {
            "beacons": {
              "difference": 120,
              "max_latency": 120
            },
            "match_size": {
              "team_count": 1,
              "team_size": 10
            }
          },
          "25": {
            "match_size": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(rappel amical pour vous assurer de changer le nom de l'application et version pour correspondre à votre Application et Versions!)

Si aucune erreur de validation n'apparaît, appuyez 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 système de matchmaking d'exemple simple.

Vous pouvez maintenant passer à l'étape suivante.

2. Explorer la Configuration

Règles uniques de jeu décontracté multijoueur

Avec un compte d'équipe de 1 et une taille d'équipe de 50, nécessitant 50 joueurs par jeu (tous les joueurs sont dans la même équipe).

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

  • laisser les joueurs fournir leurs préférences de mode de jeu et choisir un mode adapté à tous,

  • Rejoindre en tant que Groupe pour des salons préfabriqués ou pour remplir des équipes sans dépasser les tailles d'équipe,

  • ajouter 🗺️ Interface de sélection de région pour restreindre les adversaires à des régions spécifiées,

  • permettre une latence plus élevée pour préférer des matchs plus rapides avec plus de joueurs,

  • attribuer plus de CPU ou de mémoire en utilisant différentes 🏷️ Versions d'application lorsque plus de joueurs sont autorisés.

Élargir les restrictions pour garantir des matchs rapides :

  • relâcher rapidement les restrictions de latence pour trouver plus de joueurs,

  • réduire lentement la taille de l'équipe pour nécessiter moins de joueurs et commencer le jeu plus tôt,

    • optionnellement, vous pouvez faire en sorte que le serveur remplisse des places vides avec des joueurs IA,

  • si aucun coéquipier n'est trouvé, lancez le jeu en solo et utilisez Backfill pour ajouter des joueurs plus tard,

    • cela permettra aux joueurs de rejoindre des matchs existants plutôt que de nouveaux pour maximiser l'interaction sociale.

Versionning sémantique

À mesure que nous publions des mises à jour au système de matchmaking, chaque nouvelle version utilise le versionnement sémantique pour communiquer clairement les impacts des changements en interprétant le format majeur.mineur.patch:

  • les versions majeur incluent des changements majeurs qui nécessitent une révision de l'intégration,

  • les versions mineur incluent des améliorations importantes compatibles avec les versions précédentes,

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

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

Pour garantir que les pannes inattendues du client ou les 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 un changement de leur statut à 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 des Versions d'application avec une quantité prédéfinie de ressources CPU et mémoire (RAM) nécessaires.

Règles de matchmaking dans l'ensemble de règles initial doit ê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 de l'opérateur, par exemple nombre_d'équipes ou taille_d'équipe.

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_d'équipes se réfère au nombre d'équipes, 1 équipe peut être utilisée pour des modes coopératifs ou en free-for-all,

  • 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 de latence

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 réponse aller-retour (ping) contre tous les points de balisage disponibles, le Gen2 ne considérera que les matchs dans une différence spécifique dans les valeurs de ping, mesurées contre Points de balisage ping. Cela propose une solution "douce" pour diviser votre base de joueurs, permettant de matcher avec des régions voisines, améliorant particulièrement la vitesse du match pour les régions moins peuplées. Utilisez max_latency pour éviter de matcher contre des joueurs situés loin.

Vous pouvez maintenant passer à l'étape suivante.

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

  • Alice et Bob vont matcher, 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 vont pas matcher, puisque | C-D | > 50 pour le point de balisage 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 les "Règles de latence" ne peuvent être définies qu'une seule fois dans vos règles de configuration initiales.

3. Revoir les Détails de l'Instance

Examinez les détails de votre nouveau système de matchmaking dans notre tableau de bord une fois initialisé :

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

  • Identifiant aide le personnel d'Edgegap à trouver rapidement votre système de matchmaking si vous avez besoin d'aide pour dépanner.

  • Commencé à peut être utile pour localiser la dernière heure de mise à jour.

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

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

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

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

Pour tester votre nouveau système de matchmaking en utilisant l'API, vous aurez besoin de l'URL Swagger, de l'URL API et du jeton 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 Swagger

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

Enregistrez cette page comme un fichier sur votre disque (CTRL/CMD+S).

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

Importez votre fichier swagger.json du pas précédent :

  • gardez Collection Postman sélectionné,

  • séléctionnez Afficher 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'authentification - Clé API,

  • Clé - “Authorization

  • Valeur - insérez ici votre valeur AuthToken,

  • 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 tickets et Créer un ticket de matchmaking, ouvrant un nouvel onglet.

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

remarquez que player_ip est défini sur null- cela entraînera l'utilisation de l'adresse IP automatiquement ajoutée à votre demande (voir Intégration Serveur à Serveur pour des alternatives),

  • profile fait référence à vos Profils de matchmaking,

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

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

NOTE: 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 identifiant unique de ticket de matchmaking, gardez cela enregistré pour vérifier votre ticket plus tard,

  • profile confirmant le choix des Profils de matchmaking,

  • group_id est un identifiant 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 défini sur null pour indiquer que le ticket n'a pas encore été apparié ou attribué à un serveur,

  • created_at fournit des informations sur le moment où le ticket joueur a été créé pour une utilisation dans l'UI de jeu,

  • status indique le statut actuel du ticket, tous les tickets commencent dans RECHERCHE (voir Processus de matchmaking pour les détails).

Créez un deuxième ticket en appuyant à nouveau sur Envoyer, de sorte que nos deux joueurs se correspondre et un serveur soit démarré.

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

Entrez l'ID de ticket de la réponse à 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 au départ, tout en gardant assignment défini sur null pour indiquer que les joueurs se sont appariés et qu'un serveur est en cours d'attribution,

Cliquez sur Envoyer à nouveau 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 identifiants de ticket et le profil pour une traçabilité accrue.

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

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

Vous pouvez maintenant passer à l'étape suivante.

5. Intégrer le système de matchmaking dans votre jeu

Le matchmaking d'Edgegap s'intègre :

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

  • avec Serveur de Jeu, pour :

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

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

Pour le Client de Jeu, nous recommandons de fournir des mises à jour de statut des tickets tout au long du Processus de matchmaking aux joueurs en utilisant une interface utilisateur dans le jeu pour la meilleure expérience joueur. Voir :

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

  • HTTP 404 Not Found - le ticket a été supprimé,

  • HTTP 500 Internal Server Error - 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. 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 des paramètres spécifiques à la version, paramètres (capacité des joueurs) et secrets.

  3. Lisez les variables d'environnement injectées (Déploiement) pour des informations de déploiement, telles que l'adresse IP, la localisation, ou plus.

Une fois que les joueurs se connectent, le Serveur de Jeu et les Clients de Jeu commencent 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 sociale semblable à un salon ou un écran de chargement avec une barre de progression, pour indiquer que l'initialisation progresse.

Une fois que les Clients de Jeu sont complètement chargés, les joueurs chargent/voyagent vers la scène de jeu principale.

Optionnellement, le Serveur de Jeu peut créer et gérer Backfill et la capacité des joueurs (ajouter ou remplacer des 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 système de matchmaking Edgegap ! Si vous souhaitez en savoir plus, lisez tout à ce sujet dans notre Centre d'apprentissage.

Écrit par

l'équipe Edgegap