Découvrez comment fonctionne Edgegap

Découvrez comment fonctionne Edgegap

/

/

Megacity Metro (Mobile)

Unity Engine

Megacity Metro (Mobile)

Déployer sur Edgegap

Publié

Publié

Publié

Megacity Metro (Mobile) : Exécutez le jeu de tir Netcode for Entities d'Unity sur les serveurs dédiés d'Edgegap, avec Matchmaking

Megacity Metro (Mobile) : Exécutez le jeu de tir Netcode for Entities d'Unity sur les serveurs dédiés d'Edgegap, avec Matchmaking

Megacity Metro est le projet d'exemple de jeu de tir multijoueur d'Unity : jusqu'à 150 joueurs volent à travers une ville au cours d'une même partie, développé avec Netcode for Entities (DOTS/ECS). En amont, il fonctionne sur Unity Gaming Services. Le fork d'Edgegap exécute son serveur dédié sur Edgegap et recherche des parties avec le matchmaker d'Edgegap.

Le netcode du jeu ne change pas : même Netcode for Entities faisant autorité côté serveur, même prédiction et compensation du lag. Le fork ajoute quelques fichiers Edgegap et deux petits hooks. Si les paramètres Edgegap sont laissés vides, le jeu se comporte exactement comme en amont.

Les joueurs appuient sur Find Match, le matchmaker démarre un serveur dédié, et les joueurs qui lancent une recherche plus tard rejoignent ce serveur en cours d'exécution via le backfill, jusqu'à 150 par serveur. Le serveur arrête son propre déploiement lorsque plus personne ne joue.

Statut mobile, 21 octobre 2026 : les téléphones rejoignent via Find Match, car les builds de production pour mobile masquent l'option Connect directe. Ce chemin de matchmaking fonctionne et a été testé avec des clients Windows. Les builds Android et iOS n'ont pas encore été testés sur Edgegap.

Le réseau d'Edgegap s'étend sur plus de 615 emplacements Edge Cloud (en savoir plus). Chaque serveur est déployé dans le meilleur emplacement disponible pour ses joueurs et n'est facturé que pendant son fonctionnement.

Plateformes : serveur dédié Linux. Clients testés : Windows. Android, iOS et macOS sont pris en charge par le jeu d'origine en amont mais n'ont pas encore été testés sur Edgegap. Jeu original par Unity Technologies, sous licence Unity Companion License.

Comment ça fonctionne

  1. Un joueur appuie sur Find Match. Le client envoie un ticket solo au matchmaker Edgegap, sans connexion à Unity Gaming Services.

  2. Le matchmaker regroupe les joueurs sous le profil metro (une équipe de 2 à 150) et démarre un déploiement Edgegap pour la partie.

  3. Le serveur démarre, écoute sur le port UDP 7979 et ignore les sessions UGS. Chaque client reçoit l'adresse IP et le port externe du serveur, se connecte et envoie son ID de ticket afin que le serveur puisse comptabiliser les places.

  4. Tant que des places sont libres, le serveur maintient les tickets de backfill ouverts. Un joueur effectuant une recherche plus tard est dirigé vers ce serveur en cours d'exécution au lieu d'en démarrer un nouveau.

  5. Quand il ne reste plus personne, le serveur ferme ses backfills et arrête son propre déploiement, ce qui met fin à la facturation.

Ce que le fork a modifié :

Chemin

Ce qu'il fait

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapEnvironment.cs

Lit ce qu'Edgegap injecte dans un déploiement, ainsi que la cible de connexion directe du client.

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapServerLifecycleSystem.cs

Serveur : arrête le déploiement lorsque personne ne rejoint ou que tout le monde est parti.

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapMatchmakerClient.cs

Client : met en file d'attente un ticket solo et renvoie l'IP et le port du serveur.

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapBackfillSystem.cs, EdgegapTicketRpc.cs

Serveur : maintient les backfills ouverts tant qu'il y a des places disponibles, et associe les connexions aux tickets.

Assets/Scripts/Gameplay/Mix/Multiplayer/Edgegap/EdgegapMatchmakerSettings.cs, Assets/Resources/EdgegapMatchmakerSettings.asset

URL du matchmaker, jeton d'authentification, limites de profil et de backfill, partagés entre le client et le serveur.

Assets/Scripts/Gameplay/Mix/Multiplayer/SDK/Server/ServerManager.cs

Hook : sur Edgegap, ignore les sessions UGS.

Assets/Scripts/Gameplay/Mix/UI/MonoBehaviours/Matchmaker/MatchMakingConnector.cs

Hook : Find Match utilise le matchmaker Edgegap, ou se connecte directement à un serveur.

Assets/Edgegap/Editor/EdgegapServerBuild.cs

Tools → Edgegap → Build Linux Dedicated Server, également disponible en ligne de commande.

Dockerfile, .dockerignore, matchmaker-config.json

Image du serveur et configuration du matchmaker.

Aucune carte de crédit requise. L'offre gratuite inclut les ressources nécessaires pour déployer un véritable serveur de jeu.

Aucune carte de crédit requise. L'offre gratuite inclut les ressources nécessaires pour déployer un véritable serveur de jeu.

Megacity Metro skyline at dusk, with a flying vehicle near a glowing tower, and the Unity logo.

Megacity Metro d'Unity, un jeu de tir utilisant Netcode for Entities, avec son serveur sur Edgegap.

Guide étape par étape

Exécuter l'exemple

1. Avant de commencer

  • Un compte Edgegap gratuit. Aucune carte de crédit n'est requise pour tester.

  • Unity 6000.1.0f1 avec Linux Build Support (IL2CPP), Linux Build Support (Mono) et Linux Dedicated Server Build Support, ainsi que le module correspondant à la plateforme de votre client (Windows Build Support (IL2CPP) pour le client testé).

  • Docker Desktop, en cours d'exécution.

  • Git LFS, installé avant de cloner : le projet contient environ 415 Mo de contenu LFS. Prévoyez du temps : Unity indique que le premier clonage, la première ouverture du projet et la première compilation peuvent prendre chacun entre 20 et 50 minutes.

  • Clonez le fork. Le téléchargement sous forme de fichier ZIP ne fonctionne pas pour ce projet.

Git : Unity nécessite un client Git (2.14.0 ou plus récent) dans votre PATH pour installer des packages à partir d'une URL Git, comme le plugin Edgegap. macOS en possède généralement déjà un (outils en ligne de commande Xcode) ; sur Windows, installez Git.

2. Construisez le serveur et publiez l'image

Fermez le projet dans l'Éditeur Unity, puis compilez le serveur dédié Linux depuis la racine du projet :

Unity -batchmode -quit -buildTarget Linux64 -standaloneBuildSubtarget Server -projectPath . -executeMethod EdgegapServerBuild.Build -logFile build.log

Conservez -buildTarget Linux64 -standaloneBuildSubtarget Server : sans eux, la compilation du contenu Entities échoue avec « Unable to build with the current configuration ». Vous pouvez également utiliser Tools → Edgegap → Build Linux Dedicated Server dans l'Éditeur.

Le build se trouve dans Builds/EdgegapServer/ (environ 3,4 Go, principalement des fichiers de débogage). Le .dockerignore du fork les exclut, l'image fait donc environ 537 Mo.

Connectez-vous avec le nom d'utilisateur et le jeton figurant sur la page Container Registry, puis compilez et poussez avec un nouveau tag à chaque fois :

docker login registry.edgegap.com

docker build --platform linux/amd64 -t registry.edgegap.com/<project>/megacity-metro:<tag> .

docker push registry.edgegap.com/<project>/megacity-metro:<tag>

3. Créer la version de l'application

Dans le tableau de bord, créez l'application megacity-metro et une version pour votre image :

  • Image <project>/megacity-metro, votre tag, avec votre nom d'utilisateur et jeton de registre. Sans eux, les déploiements échouent à récupérer l'image.

  • 1 vCPU et 2 Go, la taille testée. Un serveur inactif a utilisé environ 18 % de processeur et 323 Mo.

  • Un port : nom gameport, 7979, UDP.

Variables d'environnement facultatives sur la version : EDGEGAP_FIRST_PLAYER_TIMEOUT_S et EDGEGAP_EMPTY_TIMEOUT_S (minuteurs d'arrêt automatique), EDGEGAP_MAX_PLAYERS et EDGEGAP_MAX_OPEN_BACKFILLS (limites de backfill), et UNITY_COMMANDLINE_ARGS pour les arguments de serveur supplémentaires.

4. Tester un serveur avec un client de bureau

Avant d'ajouter le système de matchmaking, vérifiez que le serveur fonctionne. Déployez la version depuis le tableau de bord, à proximité de chez vous. Le journal du serveur affiche Running on Edgegap ... skipping UGS sessions.

Démarrez un client de bureau avec l'hôte et le port externe du déploiement (sur la page de déploiement ; ce n'est pas 7979) :

<exécutable client> -edgegapConnect <hôte>:<port externe>

Ou définissez EDGEGAP_CONNECT=<hôte>:<port externe> avant de le lancer. L'hôte peut être l'adresse IP ou le FQDN. Avec une cible de connexion directe, le client ignore la connexion UGS et ne nécessite aucun projet UGS. Le serveur enregistre [Edgegap] Connected players: 1 lorsque vous rejoignez.

La connexion directe est réservée aux tests sur ordinateur de bureau : les versions de production mobiles masquent l'option Connexion, de sorte que les téléphones utilisent Trouver une partie (étape 6).

Pour un client de test Windows rapide, compilez avec Mono au lieu d'IL2CPP (la compilation Master IL2CPP a pris environ 40 minutes et 12 Go de RAM) :

Unity -batchmode -quit -projectPath . -executeMethod EdgegapServerBuild.BuildClient -edgegapClientTarget win64 -edgegapClientMono -buildTarget Win64 -standaloneBuildSubtarget Player -logFile client.log

Le résultat se trouve dans Builds/Client/win64-mono/. Conservez -standaloneBuildSubtarget Player après une compilation du serveur, sinon la compilation échoue avec le message « script class layout is incompatible ».

Arrêtez le déploiement lorsque vous avez terminé. L'offre gratuite n'exécute qu'un seul déploiement à la fois.

5. Ajoutez-le à votre propre jeu Netcode for Entities

Le fork sert de référence fonctionnelle : votre agent de codage peut copier ses fichiers testés au lieu de les réécrire à partir de zéro. Cinq modifications permettent d'exécuter un jeu Netcode for Entities sur Edgegap :

  1. Le serveur ignore UGS sur Edgegap. Lorsque la variable ARBITRIUM_REQUEST_ID est définie, le serveur démarre sans sessions UGS (ServerManager.cs, EdgegapEnvironment.cs).

  2. Le serveur s'arrête de lui-même. Un système du server-world appelle ARBITRIUM_DELETE_URL lorsque personne ne rejoint ou que tout le monde est parti (EdgegapServerLifecycleSystem.cs).

  3. La recherche de partie utilise le matchmaker Edgegap. Le client met en file d'attente un ticket avec le SDK Edgegap Unity et transmet l'adresse IP et le port renvoyés au flux de connexion existant du jeu (EdgegapMatchmakerClient.cs, MatchMakingConnector.cs).

  4. Les serveurs en cours d'exécution continuent de se remplir. Un système du server-world maintient le backfill ouvert tant qu'il reste des places libres, et les clients envoient leur ID de ticket via un RPC après la connexion (EdgegapBackfillSystem.cs, EdgegapTicketRpc.cs).

  5. Un build de serveur Linux et une image. Assets/Edgegap/Editor/EdgegapServerBuild.cs génère le serveur ; le Dockerfile et le fichier .dockerignore du fork excluent les fichiers de débogage de l'image.

Créez ensuite la version de l'application et le matchmaker comme décrit aux étapes 3 et 6.

Avec votre agent :

« Charge la compétence edgegap, puis edgegap-unity. Mon jeu utilise Netcode for Entities. En utilisant github.com/edgegap/netcode-game-sample-unity-dots-ecs-mobile-megacity-metro comme référence, ajoute un système du server-world qui arrête le déploiement Edgegap lorsque le serveur est vide, fais en sorte que la recherche de partie rejoigne la file avec le matchmaker Edgegap et se connecte à l'adresse renvoyée, ajoute le backfill côté serveur avec des ID de ticket envoyés via un RPC, et compile le serveur dédié Linux dans le Dockerfile du fork. »

Les compétences d'Edgegap ne disposent pas encore de modèles pour Netcode for Entities : edgegap-unity couvre le flux de travail Unity, et les systèmes ECS du fork servent de référence pour la partie netcode.

Pour chaque étape détaillée manuellement, consultez le guide d'intégration d'Unity Engine.

6. Trouver une partie avec le système de matchmaking d'Edgegap

C'est le chemin qu'utilisent les téléphones. Il a été testé avec des clients Windows le 21 octobre 2026, pas encore sur Android ou iOS.

  1. Définissez application.version dans matchmaker-config.json sur la version de votre application. Le profil metro correspond à une équipe de 2 à 150 joueurs. Deux joueurs cherchant ensemble obtiennent un serveur environ 10 secondes après avoir rejoint la file d'attente, et un joueur seul en obtient un après 30 secondes. Cela convient pour les tests ; augmentez le minimum pour de vraies parties.

  2. Dans le tableau de bord, ouvrez Matchmaker, sélectionnez Create Matchmaker, téléversez matchmaker-config.json, puis sélectionnez Create and Start.

  3. Lorsqu'il est ONLINE, copiez l'API URL et l'Auth Token dans Assets/Resources/EdgegapMatchmakerSettings.asset. L'Auth Token peut être intégré sans risque dans les clients : il ne donne aucun accès à votre compte Edgegap.

  4. Recompilez le serveur et les clients. Tous deux lisent cet asset : les clients pour trouver des parties, le serveur pour créer des backfills. Ensuite, poussez un nouveau tag et créez une nouvelle version d'application.

Appuyez sur Find Match dans un client. Le statut passe à « Searching... », « Match found, starting server... », puis le client se connecte. Les clients en mode batch (-batchmode -nographics) effectuent le matchmaking de manière autonome.

Backfill (rejoindre une partie en cours). Chaque ticket comporte un attribut backfill_group_size : les clients envoient ["new", "1"] (une nouvelle partie ou une place sur un serveur en cours d'exécution), et le serveur envoie ["1"]. Le serveur laisse 60 secondes à chaque joueur mis en relation pour se connecter, maintient jusqu'à 3 backfills ouverts tant que des places sont libres, et les ferme tous avant de s'arrêter.

Arrêt automatique. Le serveur arrête son déploiement 300 secondes après le démarrage si aucun joueur ne s'est connecté, ou 60 secondes après le départ du dernier joueur. Les joueurs mis en relation mais encore en cours de connexion le maintiennent actif.

Avec le forfait gratuit, le matchmaker s'arrête 3 heures après chaque démarrage ; redémarrez-le depuis le tableau de bord (son URL et son token restent identiques). Lorsque vous déployez un nouveau build de serveur, mettez à jour application.version dans le matchmaker (Stop, Edit, Start).

Limites connues

  • Les téléphones ne sont pas encore testés. Les builds Android et iOS devraient atteindre Edgegap via Trouver une partie, le chemin testé avec les clients Windows, mais aucun téléphone n'a encore rejoint de serveur Edgegap. Aucun playtest sur ordinateur en mode fenêtré n'a été effectué non plus ; les clients testés ont fonctionné en mode headless.

  • Aucune validation de ticket. Le serveur enregistre une connexion dont le ticket ne lui a pas été fourni, mais la laisse tout de même entrer.

  • Les backfills survivent à un arrêt externe. Si un déploiement est arrêté depuis le tableau de bord, l'API ou sa durée maximale, le serveur se ferme sans clôturer ses backfills. Pendant un maximum de 5 minutes, ils peuvent envoyer un joueur vers le serveur arrêté ; la connexion de ce joueur expire, et la recherche suivante fonctionne.

  • La connexion Vivox et UGS reste inchangée. Les chemins Edgegap ne les utilisent pas, et le navigateur de sessions du mode Connect en jeu liste toujours les sessions UGS.

Ce qui a été testé

Testé sur Edgegap avec Unity 6000.1.0f1 et une version d'application 1 vCPU / 2 Go sur 7979/UDP. Les clients étaient des builds Windows, exécutés sans interface graphique (-batchmode -nographics).

  • 20 octobre 2026, connexion directe : un client Windows IL2CPP s'est connecté avec -edgegapConnect et le serveur a enregistré l'arrivée du joueur. Le déploiement s'est arrêté de lui-même sans joueur (1502 s, délai d'expiration défini à 1500 s) et environ 60 s après que le client a quitté.

  • 21 octobre 2026, entremetteur (niveau gratuit, profil metro) : deux clients Windows (builds Mono) ont fait la queue ensemble, ont reçu MATCH_FOUND puis HOST_ASSIGNED pour le même déploiement, et se sont tous deux connectés. Un troisième client est passé directement de SEARCHING à HOST_ASSIGNED sur ce déploiement en cours via un backfill, et l'a rejoint. Après que les trois ont quitté, le déploiement s'est arrêté de lui-même.

  • En local (serveur dans Docker, variables Edgegap simulées, entremetteur réel) : lorsqu'aucun joueur apparié ne s'est connecté dans les 60 s, les places ont été libérées et les backfills fermés.

  • Non testé : clients Android, iOS et macOS.

Questions Fréquemment Posées

Questions sur l'exécution de Megacity Metro et Netcode for Entities d'Unity sur Edgegap.

Netcode for Entities peut-il fonctionner sur les serveurs dédiés Edgegap ?

Oui. Créez le jeu pour la cible Serveur Dédié Linux et exécutez-le dans un conteneur sur Edgegap. Le serveur de Megacity Metro fonctionne sur Edgegap sans modifier son netcode : le fork ajoute uniquement quelques fichiers Edgegap et deux petits hooks.

L'échantillon Megacity Metro fonctionne-t-il sur mobile avec Edgegap ?

Pas encore testé. Les téléphones rejoignent via Trouver une partie, qui utilise désormais le matchmaker Edgegap et fonctionne avec les clients Windows. Les versions Android et iOS n'ont pas encore rejoint de serveur Edgegap.

Les joueurs peuvent-ils rejoindre une partie de Megacity Metro qui a déjà commencé ?

Oui, grâce au backfill. Tant qu'un serveur a des places libres, il maintient des tickets de backfill ouverts auprès du matchmaker Edgegap, de sorte que les joueurs qui lancent une recherche plus tard le rejoignent, jusqu'à 150 par serveur.

Ai-je toujours besoin d'Unity Gaming Services ?

Pas pour l'hébergement ou le matchmaking. Sur Edgegap, le serveur ignore les sessions UGS, et Find Match ainsi que la connexion directe ignorent la connexion à UGS. Le chat vocal Vivox utilise toujours UGS.

Clients

Découvrez les témoignages de clients qui ont intégré Edgegap

31 études de cas sont disponibles auprès de studios ayant migré d'une autre plateforme vers Edgegap.

Principales raisons pour lesquelles ils ont choisi Edgegap

Découvrez l’impact de l’orchestration automatisée des serveurs de jeu d’Edgegap pour une expérience multijoueur impeccable.

Coût

Prix

Prix

Optimisez les coûts et les performances grâce à l'orchestration hybride

Optimisez les coûts et les performances grâce à l'orchestration hybride

Optimisez les coûts et les performances grâce à l'orchestration hybride

Cloud de périphérie

À la demande

0,00115 $

/ vCPU

/ MINUTE

Facturé à la minute, uniquement à l'utilisation

Payez quand les joueurs jouent. 0 serveur actif = 0 $

Déployez des serveurs de jeu dans le monde entier, par instance, dans plus de 615 emplacements edge cloud. Sans engagement.

Ajoutez simplement une carte de crédit.

Cloud de périphérie

À la demande

0,00115 $

/ vCPU

/ MINUTE

Facturé à la minute, uniquement à l'utilisation

Payez quand les joueurs jouent. 0 serveur actif = 0 $

Déployez des serveurs de jeu dans le monde entier, par instance, dans plus de 615 emplacements edge cloud. Sans engagement.

Ajoutez simplement une carte de crédit.

Private Fleet (Bare Metal)

Capacité réservée

0,0261 $

/ vCPU

/ HEURE

Facturé mensuellement, toujours actif

280 $ par hôte/mois (tarif sur 12 mois), ou 350 $ par mois

Optimisez la rentabilité de votre serveur de jeu grâce à l'hébergement sans frais de transfert de données sortantes (egress-free) des flottes privées (Private Fleets).

Permanent, disponible 24h/24 et 7j/7, exclusif à votre studio.

Private Fleet (Bare Metal)

Capacité réservée

0,0261 $

/ vCPU

/ HEURE

Facturé mensuellement, toujours actif

280 $ par hôte/mois (tarif sur 12 mois), ou 350 $ par mois

Optimisez la rentabilité de votre serveur de jeu grâce à l'hébergement sans frais de transfert de données sortantes (egress-free) des flottes privées (Private Fleets).

Permanent, disponible 24h/24 et 7j/7, exclusif à votre studio.

Votre facture varie selon le tarif et l'utilisation, qui peuvent varier en fonction
du type de jeu, du nombre de joueurs et plus encore.

Votre facture varie selon le tarif et l'utilisation, qui peuvent varier en fonction
du type de jeu, du nombre de joueurs et plus encore.

Modélisez votre utilisation avec notre calculateur d'estimation ->

Modélisez votre utilisation avec notre calculateur d'estimation ->

Fonctionnalités et tarifs d'Edgegap : comparaison détaillée entre Edge Cloud et Private Fleets

Fonctionnalités et tarifs d'Edgegap : comparaison détaillée entre Edge Cloud et Private Fleets

COMPARER

Essai gratuit

Cloud de périphérie

Flottes privées

FONCTIONNALITÉS

Analyses et surveillance

Alertes de facturation

Cliquer pour agrandir

28 lignes de plus

Déverrouille

Les fonctionnalités sont débloquées lorsqu'une carte de crédit est ajoutée au compte.

COMPARER

Essai gratuit

Cloud de périphérie

Flottes privées

FONCTIONNALITÉS

Analyses et surveillance

Alertes de facturation

Cliquer pour agrandir

28 lignes de plus

Déverrouille

Les fonctionnalités sont débloquées lorsqu'une carte de crédit est ajoutée au compte.

COMPARER

Essai gratuit

Cloud de périphérie

Flottes privées

FONCTIONNALITÉS

Analyses et surveillance

Alertes de facturation

Cliquer pour agrandir

28 lignes de plus

Déverrouille

Les fonctionnalités sont débloquées lorsqu'une carte de crédit est ajoutée au compte.