Comment ajouter un Matchmaking automatisé et sans code à n'importe quel jeu Unity Multiplayer

Ce qui suit est basé sur la documentation de notre SDK Matchmaking pour Unity. Veillez à vous référer à notre documentation pour obtenir les dernières informations.

Nous allons couvrir chaque étape pour ajouter du matchmaking à un jeu multijoueur Unity en utilisant le SDK Matchmaking gratuit d'Edgegap pour Unity. Importez un exemple prêt à l'emploi et disposez d'un système de matchmaking de base fonctionnel en quelques minutes. Regroupez les joueurs et lancez automatiquement un serveur pour chaque match, partout dans le monde. L'exemple à l'écran utilise le modèle de char de Mirror Networking, mais l'approche est indépendante du netcode et fonctionne avec Mirror, Fish-Networking, Netcode for GameObjects d'Unity, et bien plus encore.

Ce guide reprend là où le tutoriel sur les serveurs dédiés s'est arrêté. Il suppose que vous avez déjà construit, conteneurisé et déployé votre serveur de jeu sur Edgegap, et que vous avez une application avec une version en ligne sur la plateforme. Si ce n'est pas le cas, complétez d'abord ce tutoriel.

C'est parti !

Partie 1 - Installer le SDK Matchmaking

Partie 1 - Installer le SDK Matchmaking

Le plugin Edgegap utilisé dans le tutoriel de serveur dédié gère la création et le déploiement de votre serveur de jeu. Le Matchmaking est un package distinct, nommé « Edgegap Unity SDK », et s'installe séparément.

Dans Unity, depuis la barre de navigation supérieure, sélectionnez Window, puis Package Management, puis Package Manager. Sélectionnez l'icône plus, puis « Add package from git URL ». Collez l'URL du SDK (voir ci-dessous) et sélectionnez Add.

https://github.com/edgegap/edgegap-unity-sdk.git

Après quelques secondes, le SDK Edgegap apparaît dans votre liste de packages aux côtés du plugin d'hébergement.

Ensuite, importez l'exemple sur lequel travailler. Toujours dans le Package Manager, ouvrez l'onglet Samples, recherchez « Matchmaking - Simple Example » et importez-le. Cela copie quelques scripts dans votre projet sous le dossier Samples. Seul le Matchmaking Simple Example est nécessaire, vous pouvez donc laisser les autres.

Le SDK s'occupe du plus difficile : il mesure le ping de chaque joueur vers un ensemble de balises, crée un ticket de matchmaking pour chaque joueur, attend qu'un serveur soit attribué et connecte les joueurs mis en correspondance. Il laisse une lacune délibérée — la ligne exacte qui indique à votre jeu de se connecter au serveur attribué. Cette ligne dépend de votre netcode, le SDK ne peut donc pas l'écrire pour vous.

Partie 2 - Ajouter le code de connexion avec un assistant IA

Partie 2 - Ajouter le code de connexion avec un assistant IA

Pour combler rapidement cette lacune, utilisez une invite universelle que tout assistant de codage IA peut exécuter. Elle fonctionne en deux parties : d'abord, l'assistant audite le projet pour découvrir comment votre jeu et votre code réseau se connectent actuellement à un serveur, puis il ajoute la connexion de Matchmaking. Les deux invites sont indépendantes du code réseau utilisé.

Invite 1 — auditer le projet (lecture seule) :

Lecture seule, aucune modification de code. Mon projet Unity utilise un framework de code réseau et j'ajoute le Matchmaking Edgegap, qui fournira à mon client une adresse de serveur (un FQDN) et un port externe au moment de l'exécution. Trouvez et dites-moi : 1) la méthode qui démarre une connexion client à un serveur, le fichier et la ligne, et ce qui la déclenche ; 2) où l'adresse du serveur et le port sont définis avant la connexion — les noms exacts de la propriété ou du champ, le transport utilisé, ainsi que le fichier et la ligne. Fournissez les chemins d'accès aux fichiers et les numéros de ligne. Ne modifiez rien.

Pour l'échantillon Mirror Tank, l'audit confirme que le client se connecte en appelant StartClient() sur le NetworkManager de Mirror, avec l'adresse définie via NetworkManager.singleton.networkAddress et le port défini sur le PortTransport actif — dans ce cas, le transport KCP sur le port 7777.

Invite 2 — ajouter la connexion :

Dans l'échantillon Edgegap MatchmakingClientHandler.cs, trouvez le bloc qui s'exécute lorsque le statut du ticket est "HOST_ASSIGNED". Actuellement, il ne fait qu'enregistrer l'attribution. Remplacez cet espace réservé par un code qui se connecte au serveur attribué en utilisant mon code réseau : lisez le FQDN du serveur attribué et configurez-le comme adresse réseau, lisez le port externe (c'est une chaîne de caractères — convertissez-la dans le type attendu par mon transport) et configurez-le sur le transport actif, puis démarrez la connexion client. Utilisez la méthode de connexion, le champ d'adresse et le port de transport que vous avez identifiés à l'étape précédente. Renvoyez le bloc complet mis à jour.

L'assistant lit le projet, identifie le code réseau et y adapte la connexion. La même approche fonctionne pour d'autres codes réseau — l'audit et la modification s'adaptent à la méthode de connexion utilisée par le projet. La seule exception est un projet qui oriente les connexions via sa propre couche réseau personnalisée plutôt que d'appeler directement le code réseau ; l'audit le signalera, et vous pourrez alors inviter l'assistant à adapter la modification en conséquence.

Partie 3 - Connecter le gestionnaire à votre scène

Dans la scène de votre jeu, créez un objet vide : dans le menu, sélectionnez GameObject, puis Create Empty. Renommez-le "Matchmaking." Avec l'objet sélectionné, dans l'Inspecteur, sélectionnez Add Component et ajoutez le Matchmaking Client Handler.

Deux champs doivent être remplis : Base URL et Auth Token. Tous deux proviennent du matchmaker, créé ensuite. Laissez tous les autres paramètres par défaut.

Partie 4 - Créer votre Matchmaker

Sur la plateforme Edgegap, sélectionnez Matchmaker, puis Create Matchmaker, et donnez-lui un nom pour votre propre référence, comme "quickstart-dev."

Pour la configuration, rien n'a besoin d'être écrit ou collé. Ouvrez le menu déroulant et sélectionnez le Simple Example — une configuration prête à l'emploi idéale pour un match à deux joueurs, ce qui convient parfaitement au jeu de Tank. Le sélectionner remplit automatiquement votre application et votre version téléchargées le plus récemment. Confirmez qu'il s'agit bien de l'application et de la version que vous avez l'intention d'utiliser ; si vous avez plusieurs versions, sélectionnez la bonne dès maintenant.

Il convient de comprendre deux parties de cette configuration, car elles constituent le point de départ de la personnalisation ultérieure du Matchmaking :

  • La règle de taille du match définit le nombre de joueurs requis — ici, une équipe de deux joueurs.

  • La règle des latences permet à chaque joueur de tester un ensemble de balises partagées par ping et de regrouper les joueurs dont les résultats sont suffisamment proches pour partager un match à faible latence. L'emplacement du serveur est choisi séparément, en fonction de l'endroit où se trouvent réellement les joueurs regroupés.

Lors de la validation, un avertissement peut s'afficher indiquant que l'image du serveur n'est pas mise en cache. Il s'agit d'un rappel qu'une version de production bénéficie d'une image mise en cache afin que les serveurs se déploient instantanément ; pour les tests, ce n'est pas un problème, sélectionnez donc Continue. Le matchmaker démarre sur le cluster partagé gratuit — comptez quelques minutes pour l'initialisation, puis jusqu'à cinq de plus pour qu'il devienne accessible sur le réseau.

Une fois qu'il est en ligne, ouvrez ses détails. Copiez l'URL de l'API et, de retour dans Unity, collez-la dans le champ Base URL de l'objet Matchmaking. Faites de même pour l'Auth Token.

Ce jeton ne donne accès qu'à votre matchmaker et à rien d'autre sur votre compte, il est donc sûr de le conserver dans le client pendant le développement — aucun backend n'est nécessaire. En production, vous conserveriez généralement ce jeton sur votre propre backend à la place. Non pas pour cacher le jeton, puisqu'il est limité au cadre du Matchmaking et sécurisé, mais pour que les joueurs s'authentifient d'abord sur votre backend, vous permettant ainsi d'appliquer l'identité, les bannissements et le système de matchmaking basé sur les compétences (skill-based matching) avant même qu'un ticket ne soit créé.

Partie 5 - Tests

Partie 5 - Tests

Simulez deux joueurs à l'aide du Multiplayer Play Mode d'Unity (abordé dans le tutoriel sur les serveurs dédiés), puis passez en mode Lecture.

Le matchmaker trouve suffisamment de joueurs, les regroupe dans une partie et déploie un nouveau serveur de jeu pour eux dans la région la plus proche du groupe. Une fois le serveur prêt, il transmet à chaque joueur l'adresse et le port, et le code de connexion les connecte automatiquement. Les deux joueurs se connectent au même serveur dédié à la demande sans que personne n'ait à saisir d'adresse, et le tank de chaque joueur est répliqué dans la fenêtre de l'autre.

Lors de la création pour la production, notez qu'un serveur nouvellement attribué peut encore être en cours de démarrage pendant un court instant après qu'une partie a été trouvée. Facultativement, demandez à l'assistant d'ajouter une tentative de connexion de base pour combler cette attente ; une invite de tentative distincte et facultative est disponible dans la documentation. Le résultat exact dépend de votre netcode, mais c'est un point de départ utile.

Partie 6 - Prochaines étapes

Partie 6 - Prochaines étapes

L'exemple simple permet de garder les choses faciles, mais la plupart des jeux nécessiteront une logique personnalisée. Il y a deux étapes suivantes.

Tout d'abord, explorez l'exemple de matchmaking qui correspond à votre type de jeu. La documentation propose des configurations prêtes à l'emploi pour les jeux coopératifs, les jeux compétitifs avec matching basé sur le niveau des joueurs, les jeux sociaux, les salons personnalisés et le backfill (qui permet aux joueurs de rejoindre une partie déjà en cours).

Ensuite, une fois que vous avez choisi l'exemple le plus proche, apprenez ce que fait chaque règle et paramètre afin de pouvoir adapter entièrement le matchmaker à votre jeu — tailles des équipes, cartes, plages de niveau, et plus encore.

Vous pouvez également rejoindre notre communauté sur Discord pour demander de l'aide à notre équipe de développement et à d'autres studios pour adapter votre matchmaker.

Partie 7 - Le Code : Ce qu'il faut ajouter et pourquoi

Cette analyse approfondie facultative couvre le changement de code effectué par l'assistant d'IA. Ces quelques lignes sont spécifiques au projet d'exemple, mais l'idée est universelle pour tout netcode : prenez l'adresse et le port fournis par le matchmaker, transmettez-les à votre système réseau et connectez-vous. Les noms exacts ici — le NetworkManager de Mirror, son transport et l'appel StartClient() — sont spécifiques à Mirror Networking ; la structure est identique quel que soit le netcode, alors consultez la documentation de votre propre netcode pour trouver les équivalents.

Le seul fichier à modifier est le Matchmaking Client Handler. Les deux autres fichiers — le server handler et la requête de ticket personnalisée — peuvent être ignorés pour cette configuration de base.

Le seul bloc qui change est celui qui s'exécute lorsqu'un serveur a été attribué et que le statut du ticket devient HOST_ASSIGNED. Par défaut, l'échantillon enregistre uniquement les détails du serveur :

csharp

// todo join game on pre-defined game port
Debug.Log($"joining game: {assignment.Current.Assignment.Ports["gameport"].Link}"

// todo join game on pre-defined game port
Debug.Log($"joining game: {assignment.Current.Assignment.Ports["gameport"].Link}"

// todo join game on pre-defined game port
Debug.Log($"joining game: {assignment.Current.Assignment.Ports["gameport"].Link}"

Par défaut, cela affiche les détails du serveur dans la console mais ne se connecte pas, car la façon de se connecter dépend de votre netcode. Remplacez-le par :

csharp

var deployment = assignment.Current.Assignment;
string fqdn = deployment.Fqdn;
string externalPort = deployment.Ports["gameport"].External;

Debug.Log($"[Matchmaking] Host assigned: {fqdn}:{externalPort}. Connecting...");

Mirror.NetworkManager.singleton.networkAddress = fqdn;

if (Mirror.Transport.active is Mirror.PortTransport portTransport)
{
    portTransport.Port = ushort.Parse(externalPort);
}

Mirror.NetworkManager.singleton.StartClient

var deployment = assignment.Current.Assignment;
string fqdn = deployment.Fqdn;
string externalPort = deployment.Ports["gameport"].External;

Debug.Log($"[Matchmaking] Host assigned: {fqdn}:{externalPort}. Connecting...");

Mirror.NetworkManager.singleton.networkAddress = fqdn;

if (Mirror.Transport.active is Mirror.PortTransport portTransport)
{
    portTransport.Port = ushort.Parse(externalPort);
}

Mirror.NetworkManager.singleton.StartClient

var deployment = assignment.Current.Assignment;
string fqdn = deployment.Fqdn;
string externalPort = deployment.Ports["gameport"].External;

Debug.Log($"[Matchmaking] Host assigned: {fqdn}:{externalPort}. Connecting...");

Mirror.NetworkManager.singleton.networkAddress = fqdn;

if (Mirror.Transport.active is Mirror.PortTransport portTransport)
{
    portTransport.Port = ushort.Parse(externalPort);
}

Mirror.NetworkManager.singleton.StartClient

Lorsqu'un serveur est attribué, le matchmaker renvoie deux éléments importants : l'adresse du serveur et le port auquel se connecter. Le code lit l'adresse du serveur (son FQDN) et le port externe (le port par lequel les joueurs accèdent réellement au serveur), transmet l'adresse au NetworkManager de Mirror et le port au transport de Mirror — en convertissant le port de texte en nombre avec Parse, car Mirror attend un nombre — puis démarre le client, ce qui connecte le joueur en utilisant l'adresse et le port qui viennent d'être configurés. C'est tout le changement : un bloc, dans un fichier.

Intégrer Edgegap facilement en quelques minutes

Commencez l'intégration maintenant!

Mettez votre jeu en ligne facilement
& en quelques minutes