Comment ajouter un matchmaking à un jeu multijoueur COOP

Comment ajouter le matchmaking à un jeu multijoueur en COOP
Comment ajouter le matchmaking à un jeu multijoueur en COOP
Comment ajouter le matchmaking à un jeu multijoueur en COOP

Principales informations

Principales informations

Principales informations

Le systeme de matchmaking 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 COOP.

C'est également le seul système de matchmaking (à notre connaissance) avec des règles de matchmaking basées sur la latence pour offrir 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 système de matchmaking 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, comme notre système de matchmaking est entièrement géré, vous n'avez pas besoin de gérer l'infrastructure, les bogues, les pannes, la scalabilité ou la gestion de base de données. Nous nous occupons de tout pour vous. Réduisant votre charge de travail DevOps à presque zéro.

Comment intégrer le matchmaking dans votre jeu multijoueur COOP

-> Cet article est basé sur la documentation Matchmaking. Si vous rencontrez des problèmes ou des divergences, assurez-vous 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 de matchmaking des joueurs, à savoir :

Il y a cinq étapes pour implémenter notre matchmaker dans votre jeu :

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

  2. Maintenant, vous ne devriez jamais suivre aveuglément un exemple de JSON trouvé sur Internet, 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 aborde la fonction de chaque fonction de règles de matchmaking (« Explorer la configuration »).

  3. L'étape 3 (« Revoir les détails de l'instance ») couvre votre matchmaker personnel et spécifique afin de s'assurer 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 le test des demandes de matchmaking des joueurs reçues par le matchmaker, appelés tickets.

  5. L'étape 5 (« Intégrer le Matchmaking dans votre jeu ») met en lumière comment intégrer le matchmaker dans le projet de votre moteur.

Si vous avez des difficultés 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 accédez à la page Tableau de bord Matchmaker.

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

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

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

{
  "version": "2.1.0",
  "inspect": true,
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "cooperative-example": {
      "application": {
        "name": "my-game-server=>CHANG-THIS-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANG-THIS-HERE"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 1,
              "team_size": 4
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 60,
              "max_latency": 60
            }
          },
          "selected_map": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_difficulty": {
            "type": "string_equality"
          },
          "player_level": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 10
            }
          }
        },
        "expansions": {
          "5": {
            "beacons": {
              "difference": 80,
              "max_latency": 80
            }
          },
          "10": {
            "player_level": {
              "max_difference": 20
            }
          },
          "20": {
            "match_size": {
              "team_count": 1,
              "team_size": 3
            },
            "beacons": {
              "difference": 100,
              "max_latency": 100
            }
          },
          "30": {
            "match_size": {
              "team_count": 1,
              "team_size": 2
            },
            "beacons": {
              "max_latency": 200
            }
          },
          "60": {
            "match_size": {
              "team_count": 1,
              "team_size": 1
            }
          }
        }
      }
    }
  }
}

(rappel amical de bien vouloir s'assurer de changer l'application name et la version pour correspondre à vos Application et Versions!)

Si aucune erreur de validation n'apparaît, 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 matchmaker Exemple Simple.

Vous pouvez maintenant passer à l'étape suivante.

2. Explorer la Configuration

Règles de jeu multijoueur COOP uniques

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

  • permettre aux joueurs d'indiquer leurs préférences de carte et de choisir une carte convenable à tous,

  • permettre aux joueurs de choisir un niveau de difficulté de jeu particulier pour convenir au niveau de compétence de chacun,

  • restreindre la différence de niveau des joueurs pour aligner les joueurs avec un degré similaire de progression dans le jeu,

  • Rejoindre en Groupe pour des lobbies pré-faits ou remplir des équipes sans dépasser les tailles d'équipe,

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

  • allouer plus de CPU ou de mémoire en utilisant différentes App Versions lorsque plus de joueurs sont autorisés.

Commencez avec les conditions idéales, et étendez les restrictions pour assurer des matchs rapides :

  • relaxe les restrictions de latence au fil du temps pour trouver plus de joueurs,

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

    • en option, le serveur peut remplir les places vides avec des coéquipiers IA,

  • augmenter lentement la différence de niveau joueur autorisée pour trouver plus de joueurs,

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

Gestion des Versions Sémantiques

À mesure que nous publions des mises à jour de Matchmaker, chaque nouvelle version utilise Gestion des Versions Sémantiques pour communiquer clairement l'impact des changements en interprétant le format major.minor.patch:

  • major les versions incluent des changements de rupture et nécessitent une révision de l'intégration,

  • minor les versions incluent des améliorations significatives rétrocompatibles,

  • patch les versions incluent des corrections de bugs 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 client).

Pour assurer que les plantages inattendus des clients ou les tickets abandonnés ne persistent pas et n'occupent pas vos ressources de matchmaker, les tickets seront annulés après ticket_expiration_period entraînant un changement de leur statut en CANCELLED et ensuite supprimés définitivement 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'App avec la quantité prédéfinie de ressources CPU et mémoire (RAM) requises.

Règles de Matchmaking dans l'ensemble de règles initial doit être respecté pour que les joueurs soient regroupés ensemble, chacun défini 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_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'assignation :

  • nombre_d'équipes se réfère au nombre d'équipes, 1 équipe peut être utilisée pour des modes coopératifs ou chacun pour soi,

  • 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 initiale.

Règle de 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 balises disponibles, Gen2 ne considérera que les correspondances dans une différence spécifique des valeurs de ping, mesurée contre Balises de Ping. Cela présente une solution « douce » pour diviser votre base de joueurs, permettant la correspondance avec les régions voisines, améliorant surtout la vitesse des matchs pour les régions moins peuplées. Utilisez latence_maxpour éviter les correspondances avec des joueurs situés loin.

Vous pouvez maintenant passer à l'étape suivante.

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

  • Alice et Bob se correspondent, car 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 se corresponderont pas, car | 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 "Règles de Latences" ne peut être définie 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 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 le dépannage.

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

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

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

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

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

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

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 swagger.json fichier de l'étape précédente :

  • garder Collection Postman sélectionnée,

  • sélectionner Afficher les Paramètres d'Importation et changer le paramètre Génération de Paramètres à 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 votre valeur du Jeton d'Auth ici,

  • Ajouter à - En-tête.

Appuyez sur (CTRL/CMD+S) ou sur l'icône de sauvegarde pour enregistrer 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 de joueur:

notez player_ip réglé sur null- cela provoquera l'utilisation de l'adresse IP 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 matchmaker, dans ce cas pour la latences règle,

    • règle nombre_de_joueurs est la seule règle qui ne nécessite pas d'attributs dans les tickets de joueur.

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

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

  • id est votre ID de ticket de matchmaking unique, gardez-le enregistré 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 public résolue du joueur, indépendamment de la méthode d'identification utilisée,

  • assignment est réglé sur null pour indiquer que le ticket n'a pas encore été utilisé pour un match ou assigné à un serveur,

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

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

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

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

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

Examinez l'assignation mise à jour pour votre ticket de joueur :

  • statut changé en MATCH_TROUVÉ d'abord, tout en gardant assignment réglé sur null pour indiquer que les joueurs ont été appariés et qu'un serveur est en train d'être attribué,

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

  • statut changé en HÔTE_ATTRIBUÉ avec assignment contenant les détails du serveur attribué.

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

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

Essayez de vous connecter à partir de 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 la capacité de 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 Tickets de Joueur,

  • avec Serveur de Jeu, pour :

    • traiter les préférences de joueur transmises à travers leurs tickets,

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

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

Dans 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 Serveur de Jeu, traitez les préférences de joueur 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 (App Versions) pour les paramètres spécifiques de version, paramètres (capacité joueur) et secrets.

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

Une fois que les joueurs se connectent, Serveur de Jeu et Clients de Jeu commencent une scène de chargement pour effectuer des étapes de synchronisation (par ex. sélection et chargement d'une carte/scène/niveau). Nous recommandons une scène 3D complète, une interface 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 complètement chargés, les joueurs chargent/voyagent vers la scène principale de jeu.

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

Assurez-vous que votre déploiement sera arrêté correctement en utilisant DELETE_URL injecté, 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 de l'Edgegap Matchmaker ! Si vous souhaitez en savoir plus, lisez tout à ce sujet dans notre Centre d'Apprentissage.

Écrit par

l'équipe Edgegap

Intégrer Edgegap facilement en quelques minutes

Intégrer Edgegap facilement en quelques minutes

Intégrer Edgegap facilement en quelques minutes