Découvrez comment fonctionne Edgegap

Découvrez comment fonctionne Edgegap

/

/

Top Down Template

Unreal Engine

Top Down Template

Déployer sur Edgegap

Publié

Publié

Publié

dernière vérification de l'exactitude

dernière vérification de l'exactitude

dernière vérification de l'exactitude

Modèle Top Down : Exécutez le modèle Top Down Unreal d'Epic sur les serveurs dédiés d'Edgegap, avec Matchmaking

Modèle Top Down : Exécutez le modèle Top Down Unreal d'Epic sur les serveurs dédiés d'Edgegap, avec Matchmaking

Le modèle Top Down est l'un des projets de départ d'Unreal Engine 5 : cliquez pour déplacer votre personnage dans un petit niveau. L'exemple d'Edgegap le transforme en jeu multijoueur où chaque partie tourne sur son propre serveur de jeu dédié.

Le Matchmaking et le chat vocal sont tous deux désactivés par défaut : tant que vous ne les activez pas, l'exemple se comporte comme le modèle d'Unreal, et les joueurs rejoignent un serveur avec open <IP:port>. La propre réplication d'Unreal gère la mise en réseau, comme dans n'importe quel jeu multijoueur Unreal.

Activez le matchmaker d'Edgegap et les joueurs disposeront d'un bouton Find Match : le jeu mesure leur ping, les regroupe avec des joueurs à proximité et les connecte à un serveur lancé pour leur match. Activez le chat vocal EOS et les joueurs pourront parler dans des salons vocaux contrôlés par le serveur de jeu : le serveur décide qui partage un salon, de sorte qu'un joueur ne peut pas rejoindre un canal qui ne lui a pas été attribué.

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, s'arrête de lui-même lorsque la partie est vide et n'est facturé que pendant son fonctionnement.

Plateformes : clients de jeu Windows (la voix compile également pour Mac, non testé) et serveur dédié Linux sur Edgegap. Testé pour la dernière fois avec Unreal Engine 5.5.4 compilé à partir des sources ; d'autres exemples Unreal d'Edgegap sont confirmés sur 5.8. Basé sur le modèle Top Down d'Epic. Le code d'Edgegap est sous licence MIT ; le contenu Unreal Engine sur lequel il s'appuie reste soumis aux conditions d'Epic.

Comment ça marche

  1. Un joueur sélectionne Find Match sur la carte de menu. Le jeu envoie des pings aux balises d'Edgegap et transmet un ticket de matchmaking avec ces temps de ping.

  2. Le matchmaker regroupe 2 à 4 joueurs ayant un ping similaire vers la même balise, puis lance un déploiement Edgegap à proximité d'eux.

  3. Chaque client reçoit l'adresse et le port du serveur, puis se connecte à l'aide de ClientTravel d'Unreal.

  4. Lorsque la voix est activée, chaque joueur se connecte à EOS avec un identifiant d'appareil et envoie au serveur un jeton d'identification. Le serveur le vérifie, choisit le salon du joueur à partir des données d'équipe du matchmaker et renvoie un jeton vocal uniquement pour ce salon.

  5. Lorsque le dernier joueur quitte la partie, le serveur attend 15 secondes, puis arrête son propre déploiement, ce qui met fin à la facturation.

Ce que l'exemple ajoute au modèle :

Chemin

Ce que ça fait

MultiplayerGame/Source/MultiplayerGame/EdgegapMatchmakerSubsystem.h/.cpp

Client : pings de balises, ticket de matchmaking, attente d'un serveur, connexion.

MultiplayerGame/Source/MultiplayerGame/MultiplayerGamePlayerController.cpp

Overlay Find Match / Cancel sur la carte de menu ; commandes de console FindMatch et CancelMatch.

MultiplayerGame/Source/MultiplayerGame/MultiplayerGameGameMode.cpp

Serveur : arrête le déploiement lorsqu'une partie lancée par le matchmaker est vide.

MultiplayerGame/Source/MultiplayerGame/EdgegapVoice*

Voix EOS : paramètres, connexion client et salons, le composant vocal répliqué, le service de jetons du serveur.

MultiplayerGame/Source/MultiplayerGameServer.Target.cs

La cible de compilation du serveur dédié.

Dockerfile, matchmaker-config.json

L'image du serveur et le profil 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.

Unreal Engine Top Down template seen from above: a player in an arena of blue shapes, with the Unreal Engine logo.

Modèle Top Down d'Epic avec un serveur dédié, matchmaking optionnel et chat vocal EOS.

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.

  • Unreal Engine 5.5 compilé à partir des sources, avec Visual Studio 2022 et la chaîne d'outils de compilation croisée Linux pour la version 5.5. L'exemple package son serveur Linux avec RunUAT, ce qui nécessite une version compilée à partir des sources. Prévoyez 1 à 3 heures pour la première compilation du moteur, et environ une heure pour le premier packaging du serveur. Le guide Unreal Engine couvre la configuration, ainsi qu'une méthode plus rapide avec l'extension Docker d'Edgegap (non testée avec cet exemple pour le moment).

  • Docker Desktop, pour compiler l'image du serveur.

  • Pour le chat vocal uniquement : un produit dans le portail des développeurs Epic.

  • Clonez l'exemple. Le projet Unreal se trouve dans le dossier MultiplayerGame.

2. Déployez le serveur de jeu sur Edgegap

Empaquetez le serveur dédié Linux dans Packaged/ à la racine du dépôt :

<UE_ROOT>/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=<PATH>/MultiplayerGame/MultiplayerGame.uproject -noP4 -server -noclient -serverplatform=Linux -serverconfig=Development -build -cook -stage -pak -archive -archivedirectory=<PATH>/Packaged

Connectez Docker à votre registre Edgegap à l'aide du nom d'utilisateur et du jeton issus de la page Container Registry. Ensuite, compilez et poussez l'image depuis la racine du dépôt, avec un nouveau tag pour chaque compilation :

docker build --platform linux/amd64 -t registry.edgegap.com/<project>/unreal-topdown:v1 .

docker push registry.edgegap.com/<project>/unreal-topdown:v1

Dans le tableau de bord, créez une application (le profil du matchmaker attend unreal-topdown) et une version v1 :

  • Votre image et votre tag, avec vos identifiants de registre. Sans eux, les déploiements échouent avec le message « Unable to pull image from registry ».

  • Un port : nom gameport, 7777, UDP.

Le Dockerfile exécute directement le binaire du serveur, avec -stdout -FullStdOutLogOutput, afin que ses journaux apparaissent dans le tableau de bord et qu'il s'arrête proprement lorsque Edgegap met fin au déploiement.

3. Jouer sur un serveur de test

Ouvrez la version de votre application dans le tableau de bord, sélectionnez Deploy et choisissez un emplacement près de chez vous. Lorsqu'elle est Ready, copiez l'Host et le External Port.

Lancez le jeu, ouvrez la console avec la touche ` et tapez :

open <host>:<external port>

Le port externe change à chaque déploiement. Lancez un second client de la même manière et les deux joueurs pourront se déplacer dans le même niveau.

Un serveur que vous déployez manuellement ne s'arrête jamais de lui-même : arrêtez-le depuis le tableau de bord lorsque vous avez terminé. L'offre gratuite n'exécute qu'un seul déploiement à la fois, un serveur de test oublié bloque donc le matchmaking.

4. Ajouter le chat vocal EOS (facultatif)

Le serveur de jeu agit en tant que serveur approuvé (trusted server) d'EOS Voice. Il appelle l'API Web EOS Voice via HTTPS, car le SDK EOS ne prend pas en charge la voix sous Linux. Les joueurs se connectent avec un identifiant d'appareil (device ID), ils n'ont donc pas besoin de compte Epic.

  1. Dans le portail des développeurs Epic, ouvrez votre produit, puis Product Settings. Notez le Product ID, le Sandbox ID et le Deployment ID. Dans l'onglet Clients, ajoutez deux politiques client, ainsi qu'un client pour chacune d'elles :

  2. Client de jeu : type GameClient, User required coché, aucune autorisation Voice.

  3. Serveur approuvé : une politique personnalisée, User required décoché, avec les actions Voice createRoomToken, kick et mute. Ce client peut créer un jeton pour n'importe quel salon : ne l'incluez jamais dans un build de jeu.

  4. Placez les identifiants de produit, de bac à sable (sandbox) et de déploiement, ainsi que l'identifiant et le secret du client de jeu dans une section [EOSVoiceChat] de MultiplayerGame/Config/UserEngine.ini. Git l'ignore.

  5. Activez la voix dans MultiplayerGame/Config/UserGame.ini : bEnabled=True sous [/Script/MultiplayerGame.EdgegapVoiceSettings].

  6. Sur une nouvelle version de l'application, ajoutez les variables d'environnement EOS_VOICE_CLIENT_ID et EOS_VOICE_CLIENT_SECRET (cochez hidden) avec les identifiants du serveur approuvé, ainsi que EOS_VOICE_DEPLOYMENT_ID. La voix s'active sur le serveur lorsqu'elles sont définies, sans nécessiter de recompilation de l'image.

  7. Empaquetez à nouveau le client et jouez. Tapez VoiceMute dans la console pour couper ou réactiver votre microphone.

Sur un serveur déployé manuellement, l'ensemble du match partage un seul salon. Avec le matchmaker (étape 6), les coéquipiers partagent un salon.

Pour tester deux clients sur un seul PC, ajoutez -EOSVoiceNewDeviceId au deuxième client, et ne le lancez qu'une fois que le premier a consigné Voice: logged into EOS dans les journaux. Pour tester l'audio sans microphone, lancez un client avec :

-ExecCmds="EOSVoiceChat.FakeAudioInputEnabled 1"

L'autre client enregistre alors dans les journaux : Voice: <id> started talking in room <room>.

5. Ajoutez-le à votre propre jeu Unreal

L'exemple est une référence fonctionnelle : votre agent de codage peut copier ses fichiers testés au lieu de les écrire de zéro. Ces modifications permettent d'exécuter un jeu Unreal sur Edgegap :

  1. Un build de serveur dédié. Une cible Server (Source/MultiplayerGameServer.Target.cs), une carte par défaut pour le serveur (ServerMap dans Config/DefaultEngine.ini) et cette carte parmi les cartes à cook (Config/DefaultGame.ini).

  2. Trouver une partie côté client. EdgegapMatchmakerSubsystem envoie des pings aux balises, crée le ticket, attend un serveur et s'y connecte. Ses paramètres se trouvent dans la section [/Script/MultiplayerGame.EdgegapMatchmakerSubsystem] de DefaultGame.ini.

  3. Des serveurs qui s'arrêtent automatiquement. Lorsque le matchmaker a démarré le serveur, il arrête son déploiement dès que la partie est vide (MultiplayerGameGameMode.cpp).

  4. Des salons vocaux décidés par le serveur. Les quatre classes EdgegapVoice*, les modules EOS dans MultiplayerGame.Build.cs pour les clients Windows et Mac uniquement, et le plugin EOSVoiceChat dans le fichier .uproject, restreint à Win64 et Mac afin que le serveur Linux ne charge pas le SDK EOS.

  5. Une image de serveur. Le Dockerfile copie Packaged/LinuxServer dans une image Ubuntu légère qui s'exécute en tant qu'utilisateur non-root.

Dans l'exemple, l'overlay Trouver une partie et l'arrêt automatique se trouvent dans le contrôleur de joueur et le mode de jeu. Dans votre propre jeu, vous n'avez besoin de modifier ni l'un ni l'autre : les compétences d'agent Edgegap fournissent la même logique sous forme de sous-systèmes prêts à l'emploi.

Avec votre agent :

« Charge la compétence edgegap-unreal, puis edgegap-eos-voice. En utilisant github.com/edgegap/game-sample-unreal-engine-topdown comme référence, prépare mon projet Unreal pour les serveurs dédiés, ajoute le matchmaking Edgegap avec un bouton Trouver une partie et l'arrêt automatique du serveur, et ajoute le chat vocal EOS avec un salon par équipe de matchmaking. Laisse le matchmaking et la voix désactivés jusqu'à ce que je te donne mon URL de matchmaker et mes identifiants EOS, puis vérifie que l'éditeur et les cibles Server compilent. »

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

6. Activez la recherche de correspondance

  1. Dans le tableau de bord, ouvrez Matchmaker et sélectionnez Create Matchmaker. Téléversez le fichier matchmaker-config.json de l'exemple, avec application.name et application.version modifiés pour correspondre à votre application et à votre version, puis cliquez sur Create and Start.

  2. Lorsqu'il est ONLINE, copiez son API URL et son Auth Token.

  3. Dans MultiplayerGame/Config/UserGame.ini, ajoutez la section [/Script/MultiplayerGame.EdgegapMatchmakerSubsystem] avec bEnabled=True, MatchmakerUrl="<API URL>" et AuthToken="<Auth Token>". Laissez l'URL entre guillemets : sans guillemets, Unreal la tronque au niveau de //.

  4. Lancez deux clients et sélectionnez Find Match sur les deux dans un intervalle de 10 secondes. Ils rejoignent le même serveur.

Le profil casual associe 2 à 4 joueurs dont le ping vers une balise commune est inférieur à 150 ms et dont l'écart entre eux ne dépasse pas 100 ms. Après 10 secondes, il accepte également un seul joueur et des pings allant jusqu'à 250 ms, ce qui vous permet de tester seul. Un ticket sans correspondance est annulé après 20 secondes : sélectionnez à nouveau Find Match.

L'Auth Token permet uniquement aux clients de créer et de lire des tickets, il peut donc être inclus dans le jeu en toute sécurité. Ne placez jamais votre jeton d'API Edgegap dans le jeu.

Pour les tests sans surveillance, -FindMatch sur la ligne de commande permet de se mettre en file d'attente au démarrage. Les clients démarrent à des vitesses différentes, donc pour les tests vocaux, lancez-les plutôt tous les deux avec le même -FindMatchAt=<unix time> : chacun se mettra en file d'attente à ce moment précis.

Lorsque vous déployez une nouvelle version du serveur, faites pointer application.version vers la nouvelle version, sinon les parties continueront à déployer l'ancienne version. Pour le matchmaking dans votre propre jeu, consultez Unreal Matchmaking.

Limites connues

  • Moteur compilé à partir des sources. Les étapes de packaging de l'exemple nécessitent une version compilée à partir des sources d'Unreal 5.5. L'extension Docker d'Edgegap compile les serveurs Unreal à partir d'une installation du Launcher ; cela devrait fonctionner avec cet exemple, mais ce n'est pas encore testé.

  • Le chat vocal fonctionne sur les clients Windows et Mac. Le plugin EOSVoiceChat du moteur ne dispose pas de client Linux. Les builds Mac devraient fonctionner, non testé.

  • Une équipe par match. Le profil casual comporte une seule équipe, de sorte que chaque joueur mis en correspondance partage un salon vocal. Pour deux équipes, ajoutez team_count: 2 au profil : le serveur attribue ensuite à chaque équipe son propre salon (implémenté mais non testé). Le serveur détermine l'équipe d'un joueur à partir de son adresse IP, de sorte que les joueurs situés derrière la même adresse IP restent dans le salon du match.

  • Connexions par identifiant d'appareil (Device ID). Les joueurs obtiennent une identité EOS liée à leur PC, sans compte de plateforme. Pour un jeu commercialisé, utilisez la connexion de la plateforme (Steam, consoles) et liez les comptes.

  • Un menu de base. L'overlay « Find Match » est un simple widget Slate. Pour votre propre menu, appelez FindMatch et écoutez l'état du sous-système depuis UMG.

  • Aucune vérification de ticket sur le serveur. Le serveur ne vérifie pas qu'un joueur en cours de connexion détient un ticket de matchmaking pour ce match, de sorte que toute personne connaissant l'adresse du serveur peut le rejoindre et, si la voix est activée, obtenir un jeton vocal pour son salon.

Ce qui a été testé

Testé de bout en bout sur Edgegap en octobre 2026 (test du matchmaker réussi le 14 octobre), avec Unreal Engine 5.5.4 compilé à partir des sources, des clients Windows et le serveur Linux sur Edgegap :

  • Matchmaking : deux clients associés selon la latence sur un déploiement Edgegap ; le serveur a arrêté son propre déploiement après le départ des deux clients.

  • Voix, en local : deux clients sur un seul PC (-EOSVoiceNewDeviceId, entrée audio fictive) connectés à un serveur dédié local : tous deux ont rejoint le salon avec des identités EOS distinctes.

  • Voix, sur Edgegap : deux clients associés sur un même déploiement, dans le même salon d'équipe, s'entendant mutuellement. Lorsque l'un a quitté, le serveur l'a retiré du salon (204).

Lignes de log à rechercher (LogEdgegapVoice) : sur le serveur, Voice: trusted voice server ready, puis Voice: <id> gets room <room> pour chaque joueur, et Voice: removed <id> lorsqu'un joueur quitte. Sur chaque client, Voice: logged into EOS as <id> et Voice: joined room <room>.

Non testé pour le moment : parties à 3 ou 4 joueurs, deux équipes dans des salons séparés, clients Mac et compilation de l'exemple avec l'extension Docker.

Questions Fréquemment Posées

Questions concernant l'utilisation du template Top Down d'Unreal avec le matchmaking d'Edgegap et le chat vocal EOS.

Le modèle Top Down d'Unreal peut-il fonctionner sur un serveur dédié ?

Oui. L'exemple d'Edgegap ajoute une cible Serveur et une carte serveur au modèle Top Down, et le package en tant que serveur dédié Linux. Les joueurs se connectent avec open <IP:port>, ou avec un bouton Trouver une partie une fois que le matchmaker d'Edgegap est activé.

Le chat vocal EOS fonctionne-t-il avec un serveur dédié Linux ?

Pas via le SDK EOS, qui ne prend pas en charge la voix sous Linux. Le serveur de l'exemple utilise plutôt l'API Web EOS Voice : il vérifie le jeton d'ID EOS de chaque joueur et distribue des jetons de salon vocal, tandis que les clients Windows ou Mac rejoignent les salons.

Les joueurs ont-ils besoin d'un compte Epic Games pour utiliser le chat vocal d'EOS ?

Non. L'échantillon connecte les joueurs à EOS à l'aide d'un identifiant d'appareil, il n'y a donc rien à créer. Pour un jeu commercialisé, vous pouvez le remplacer par la méthode de connexion de votre plateforme, comme Steam.

Chaque équipe peut-elle avoir son propre salon vocal ?

Oui. Lorsque les salles d'équipe sont activées, le serveur place chaque équipe du matchmaking dans sa propre salle, de sorte que les joueurs ne peuvent pas entendre l'autre équipe. Le profil de matchmaking de l'échantillon comporte une équipe par match, donc tout le monde partage une salle jusqu'à ce que vous ajoutiez une deuxième équipe.

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.

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.

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.