Comment ajouter un matchmaking à un jeu de combat multijoueur

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 de combat.

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, 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, 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 combat multijoueur

-> Cet article est basé sur la documentation de matchmaking. Si vous rencontrez des problèmes ou des écarts, assurez-vous de vous référer au guide original, car il est plus souvent mis à jour.

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

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

  1. La première étape est de créer un compte et d'utiliser notre exemple de jeu de combat. Voilà, vous avez (techniquement) presque terminé ! Vous devez seulement intégrer le système de matchmaking dans votre jeu (voir étape 5).

  2. Maintenant, vous ne devriez jamais suivre aveuglément un exemple JSON 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 examine la fonction de chacune des fonctions des règles de matchmaking ("Explorer la Configuration").

  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 le design de votre jeu.

  4. L'étape 4, comme son nom l'indique ("4. Tester l'API des Billets"), concerne les tests des demandes de matchmaking des joueurs reçues par le système de matchmaking, appelées billets.

  5. L'étape 5 ("Intégrer le Matchmaking dans votre Jeu") souligne comment intégrer le système de matchmaking au sein du 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. Configuration de la Version Gratuite

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

De là, cliquez d'abord sur Créer un Matchmaker et saisissez :

  • Un nom pour votre système de matchmaking – qui est uniquement 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 de combat :

{
  "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 pour s'assurer de changer le nom de l'application et version pour correspondre à votre Application et Versions!)

S'il n'y a pas d'erreurs de validation, appuyez sur Créer et Démarrer et attendez que le processus se termine. Cela entraînera le démarrage d'un nouveau cluster gratuit, avec votre exemple simple de système de matchmaking.

Vous pouvez maintenant passer à l'étape suivante.

2. Explorer la Configuration

Règles Uniques de Jeu de Combat

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

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

  • restreindre la différence de rang pour ne permettre que des adversaires ayant le même rang pour des jeux classés,

  • laisser les joueurs fournir leurs préférences de carte et choisir une carte adaptée à tout le monde,

  • ajouter UI de Sélection de Hub pour restreindre les adversaires à des Balises de Latence spécifiées,

  • restreindre la latence de matchmaking à un seuil maximum pour empêcher le matchmaking entre des joueurs éloignés,

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

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

  • Rejoindre en Groupe pour des lobbys préétablis ou pour compléter des équipes sans dépasser les tailles d'équipe.

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

  • détendre lentement les restrictions de latence au fil du temps pour trouver plus de joueurs,

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

  • augmenter le temps entre les expansions pour les plus hauts rangs (challengers), car moins de joueurs sont disponibles.

Créez des billets avec un rang plus élevé pour les matchs de promotion, afin d'affronter des adversaires plus coriaces.

Définissez des profils de tricheurs séparés pour garantir que les tricheurs signalés ou les joueurs avec 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 majeur.minor.patch :

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

  • les versions mineures incluent des améliorations substantielles rétrocompatibles,

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

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

Pour s'assurer que les crashs inattendus des clients ou les billets abandonnés ne restent pas et n'occupent pas vos ressources de matchmaking, les billets seront annulés après ticket_expiration_period modifiant leur statut en CANCELLED 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 de matchmaking totalement isolée, pointant vers des Versions d'Application avec une quantité prédéfinie de ressources CPU et mémoire (RAM) requises.

Règles de Matchmaking dans l'ensemble des 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 - player_count,

  • et enfin les attributs de l'opérateur, par exemple team_count ou team_size.

Règle de Nombre de Joueurs

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

  • team_count fait référence au nombre d'équipes, 1 équipe peut être utilisée pour des modes coopératifs ou de bataille royale,

  • team_size 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 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 réponse aller-retour (ping) contre toutes les balises disponibles, Gen2 ne considérera que les matchs à l'intérieur d'une différence spécifique des valeurs de ping, mesurées par rapport aux Balises de Latence. Cela présente une solution “douce” pour diviser votre base de joueurs, facilitant le matchmaking avec les régions voisines, améliorant particulièrement la vitesse des matchs pour les régions moins peuplées. Utilisez max_latencypour empêcher le matchmaking contre des joueurs situés loin.

Vous pouvez maintenant passer à l'étape suivante.

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

  • Alice et Bob s'affronteront, 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 s'affronteront pas, puisque | C-D | > 50 pour la Balise 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 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 système de matchmaking dans notre tableau de bord une fois qu'il est initialisé :

Statut indique l'état du service, peut être EN LIGNE, HORS LIGNE ou ERREUR.

  • Identifiant aide le personnel d'Edgegap à trouver votre système de matchmaking rapidement 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é par les clients de jeu et serveurs de jeu pour communiquer avec Gen2.

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

  • Jeton d'Auth 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 à l'aide de l'API, vous aurez besoin de l'URL Swagger, de l'URL API et du Jeton d'Auth.

Vous pouvez maintenant passer à l'étape suivante.

4. Tester l'API des Billets

Tout d'abord, ouvrez votre URL Swagger pour inspecter votre schéma openAPI dans l'interface utilisateur 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 Postman Collection sélectionné,

  • séléctionnez Voir les Paramètres d'Importation et changez les paramètres Génération de Paramètres en Exemple.

Confirmez l'importation, ce qui entraînera l'apparition d'une nouvelle collection dans la liste des Collections à gauche, intitulée Matchmaker.

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

  • Type d'Auth - Clé API,

  • Clé - “Authorization

  • Valeur - insérez ici votre valeur de Token,

  • Ajouter à - En-tête.

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

Dans votre collection Matchmaker, sélectionnez billets et Créer un billet de matchmaking, ouvrant un nouvel onglet.

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

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

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

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

    • la règle player_count est la seule règle qui ne nécessite aucun attribut dans les billets de joueurs.

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

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

  • id est votre ID unique de billet de matchmaking, gardez cela enregistré pour vérifier votre billet plus tard,

  • profile confirmant le choix de Profils de Matchmaking,

  • group_id est un identifiant de groupe unique attribué à chaque billet, un joueur seul 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 billet n'a pas encore été apparié ou attribué à un serveur,

  • created_at fournit des informations sur la date de création du billet de joueur pour l'utilisation dans l'interface utilisateur du jeu,

  • status indique le statut actuel du billet, tous les billets commencent en RECHERCHE (voir Processus de Matchmaking pour les détails).

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

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

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

Examinez l'attribution mise à jour pour votre billet de joueur :

  • le statut a changé en MATCH_FOUND en premier, 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 à nouveau sur Envoyer pour vérifier votre billet, et examinez l'attribution mise à jour pour votre billet de 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 ID de billets 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èmes et que vous avez terminé le test, arrêtez votre Déploiement pour libérer de la capacité dans votre compte pour le prochain build.

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 Billets de Joueurs,

  • avec Serveur de Jeu, pour :

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

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

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

Écrit par

l'équipe Edgegap