Découvrez comment fonctionne Edgegap

Découvrez comment fonctionne Edgegap

Le Netcode Unity le plus simple : NGO vs Mirror vs Fish-Net vs PurrNet

Publié

Publié

Publié

mise à jour

mise à jour

mise à jour

dernière vérification de l'exactitude

dernière vérification de l'exactitude

dernière vérification de l'exactitude

Le netcode Unity le plus facile pour les développeurs de jeux

Points Clés

Points Clés

Points Clés

Réponse courte : Mirror Networking est probablement le point de départ le plus solide et le plus simple pour la plupart des jeux multijoueurs Unity. Gratuit et open source, il bénéficie d'une vaste communauté établie depuis plus de 10 ans et repose sur une architecture faisant autorité côté serveur (server-authoritative), améliorant ainsi les limites strictes de la solution intégrée de Unity, Netcode for GameObjects.

  • Mirror : gratuit, open source certifié OSI, autorité côté serveur, compensation du décalage (lag compensation), largement documenté.

  • Fish-Net : prédiction côté client pour les transforms et rigidbodies ; la compensation du décalage est une fonctionnalité payante.

  • PurrNet : gratuit ; instanciation avec de simples Instantiate() et Destroy() ; autorité définie dans un unique objet Network Rules.

  • Netcode for GameObjects : la solution intégrée de Unity, avec des limites strictes bien documentées.

  • L'hébergement Edgegap s'intègre avec les quatre, y compris Netcode for GameObjects.

Le développement de jeux est complexe, ses composants sont souvent nombreux et aussi intriqués à comprendre qu'ils sont nommés. Dans ce guide, nous visons à démystifier la complexité des services de jeu, des outils et des technologies pour les débutants et les développeurs indépendants.

En commençant par l'élément tout-puissant et essentiel pour les jeux multijoueurs : le netcode.

Comprendre le netcode est crucial pour créer des expériences multijoueurs engageantes et fluides. Voyons ce que c'est, pourquoi il est important, ainsi que les implémentations de netcode les plus simples et les plus efficaces disponibles aujourd'hui dans Unity.

Qu'est-ce que le Netcode ?

Le netcode est un terme qui englobe l'aspect réseau d'un jeu vidéo, en particulier dans les contextes multijoueurs. C'est la technologie responsable de l'échange de données entre les appareils des joueurs et les serveurs de jeu, appelé « synchronisation », et qui garantit que les actions effectuées par un joueur sont reflétées immédiatement et précisément dans l'environnement de jeu d'un autre joueur.

Cette synchronisation représente un défi en raison des latences et des qualités de connexion variables que rencontrent les joueurs à travers le monde. Un netcode efficace prend en compte les configurations matérielles vieillissantes ou sous-optimales des joueurs, en s'efforçant d'offrir une expérience de jeu équitable et fluide.

Le netcode joue également un rôle essentiel dans le maintien de l'intégrité du jeu en gérant les données de manière sécurisée.

Choisir le bon Netcode pour votre jeu

Le choix du netcode approprié est une décision charnière dans le développement de jeux. Ce choix dépend largement du genre de votre jeu, des mécaniques de gameplay et de la base de joueurs attendue.

  1. Modèles Client-Serveur vs Pair-à-Pair (P2P) : Le P2P est souvent utilisé dans des jeux plus modestes, moins sensibles à la latence et généralement non compétitifs. Il connecte directement les joueurs entre eux, réduisant ainsi le besoin d'un serveur central. En revanche, le modèle client-serveur, où les joueurs se connectent à un serveur central, est plus adapté aux jeux compétitifs de plus grande envergure nécessitant l'autorité d'un serveur tiers pour appliquer les règles du jeu et assurer la sécurité. Cependant, le P2P en particulier introduit des problèmes de sécurité dont les développeurs de jeux doivent être conscients lorsqu'ils choisissent cette architecture.

  2. Prendre en compte le genre du jeu : Les jeux au rythme rapide comme les jeux de tir exigent un netcode plus robuste pour gérer les actions rapides des joueurs et s'assurer que tous les clients restent synchronisés, tandis que les jeux de stratégie peuvent être plus indulgents et utiliser des techniques prédictives pour permettre des sessions avec des latences plus élevées.

  3. Évolutivité : Anticipez la croissance de votre jeu. Un netcode évolutif peut gérer un nombre croissant de joueurs sans compromettre les performances ni faire grimper drastiquement la facture auprès de votre hébergeur.

  4. Sécurité et Fair-play : Assurez-vous que votre netcode puisse déjouer les tricheries et piratages courants afin de maintenir des règles du jeu équitables.

Créer un jeu multijoueur : Utiliser le Netcode pour une première expérience

Pour les débutants, Unity propose une plateforme conviviale pour implémenter du netcode appelée Netcode for GameObjects. Décomposons les étapes de base :

  1. Comprendre le Netcode d'Unity : Unity fournit un ensemble d'outils robuste pour la mise en réseau. Familiarisez-vous avec les composants réseau d'Unity, tels que NetworkManager et NetworkObject.

  2. Configurer un réseau de base : Commencez par créer une configuration client-serveur simple. Les tutoriels et la documentation d'Unity sont d'excellentes ressources pour ces étapes initiales.

  3. Synchroniser les GameObjects : Apprenez à synchroniser des objets de jeu entre différents clients. Cela inclut les personnages des joueurs et les éléments interactifs du monde du jeu.

  4. Gérer les entrées des joueurs : Veillez à ce que les commandes des joueurs soient communiquées et reflétées efficacement sur tous les clients.

  5. Tester : Testez régulièrement votre netcode dans diverses conditions de réseau pour garantir fiabilité et performances.

Passer à la vitesse supérieure : Les meilleures alternatives de Netcode

Il est bien documenté que Netcode for GameObjects présente de strictes limites. Plus précisément, trois solutions de netcode conçues par la communauté se sont démarquées et apportent chacune des améliorations significatives aux développeurs de jeux. Deux sont des projets open source établis depuis longtemps : le vétéran aux 10 ans d'existence Mirror Networking et Fish-Net Networking. Le troisième, PurrNet, est un nouveau venu qui gagne en popularité grâce à sa conception pensée pour les développeurs.

Mirror Networking

Mirror est la bibliothèque réseau open source la plus ancienne pour Unity, issue de l'actuel UNET obsolète qu'Unity intégrait nativement. Elle repose sur une topologie client-serveur avec autorité serveur, ce qui signifie que le serveur détient la vérité sur l'état du jeu — un prérequis pour tout jeu nécessitant une protection anti-triche efficace.

Mirror est open source certifié OSI, largement documenté et soutenu par une vaste communauté. Il intègre la prise en charge de la compensation de latence (utile pour l'enregistrement des tirs dans les jeux de tir), de l'Area of Interest (pour contrôler quels clients reçoivent des mises à jour sur quels objets), des transports Steam et Epic, du protocole WebSocket pour les builds WebGL, et du Multiplex Transport afin qu'un seul serveur puisse accepter simultanément des clients sur différents transports.

Quelques éléments méritent d'être connus avant de vous engager. Mirror utilise une architecture d'API de type singleton, ce qui signifie qu'une seule instance du cœur réseau peut s'exécuter par exécutable. Cela convient à la plupart des jeux, mais limite certaines architectures avancées. Il n'y a pas non plus de cycle officiel de support à long terme (LTS) : par le passé, l'API a évolué à un rythme pouvant nécessiter des mises à jour de code entre les versions. Pour un jeu en développement actif, cela implique de surveiller attentivement le journal des modifications (changelog).

Parmi les jeux renommés utilisant Mirror Networking, on retrouve Population: ONE, Zoomba (100 millions de téléchargements sur Google Play) et Unleashed conçu par d'anciens développeurs de World of Warcraft.

PurrNet

PurrNet est une bibliothèque réseau Unity gratuite et open source, conçue par des développeurs qui trouvaient que les solutions existantes allaient à l'encontre du flux de travail naturel d'Unity au lieu de l'adopter. L'idée centrale est simple : si vous savez déjà utiliser Unity et C#, vous devriez pouvoir créer des jeux multijoueurs sans avoir à réapprendre une méthode de travail entièrement différente.

Quelques aspects se distinguent particulièrement. Tout d'abord, l'apparition (spawning) et la disparition (despawning) fonctionnent exactement comme dans Unity. Vous appelez Instantiate() et Destroy(), et PurrNet s'occupe de la gestion réseau. Pas d'appels spécifiques d'apparition, pas d'étapes supplémentaires. Deuxièmement, l'autorité est contrôlée par un unique Scriptable Object de Network Rules plutôt que d'être figée dans votre code de jeu, ce qui signifie que vous pouvez prototyper avec une autorité client totale et la verrouiller plus tard en autorité serveur sans rien réécrire. Troisièmement, il n'y a pas d'étape de baking. Les identifiants de scène (Scene IDs) sont calculés au moment de l'exécution à partir de l'ordre de la hiérarchie, ce qui élimine toute une catégorie de conflits de contrôle de version et de problèmes de build mystérieux auxquels les développeurs se heurtent régulièrement avec d'autres solutions.

Du côté des RPC, PurrNet prend en charge les RPC génériques, statiques et « awaitable ». Les RPC « awaitable » vous permettent d'appeler une méthode sur le serveur et d'attendre directement une valeur de retour, à l'instar du fonctionnement d'async/await en C# classique. Il intègre également un système de données de joueur persistantes (son système de « cookies ») qui permet au serveur de reconnaître un joueur qui se reconnecte comme étant la même personne, sans nécessiter de code personnalisé.

PurrNet est 100 % gratuit sans formule payante. Il n'y a aucun partage de revenus, aucun coût initial et aucune fonctionnalité principale n'est bloquée derrière un accès payant.

Edgegap propose un tutoriel d'intégration complet pour PurrNet qui explique en détail comment connecter votre projet Unity à des serveurs de jeu dédiés :

Fish Networking (« Fish-Net »)

Fish-Net Networking est une technologie réseau conçue pour les jeux multijoueurs en ligne, mettant l'accent sur l'adaptabilité et l'évolutivité. Elle est devenue la recommandation de référence pour les développeurs désireux d'utiliser des outils maintenus par la communauté qui restent adaptés aux types de jeux les plus exigeants.

Là où Mirror privilégie la simplicité, Fish-Net affirme aller plus loin. Il intègre la prédiction côté client pour les transforms ainsi que pour les rigidbodies — le genre de fonctionnalité indispensable lorsque vous développez des jeux compétitifs au rythme soutenu où les mouvements doivent sembler immédiats tout en conservant l'autorité du serveur. La compensation de latence est disponible (sous forme de fonctionnalité payante) pour un enregistrement précis des impacts, quelle que soit la latence du joueur. Pour les mondes de jeu plus vastes, la prise en charge de l'Area of Interest vous permet de contrôler exactement quels clients reçoivent des mises à jour sur quels objets, maintenant ainsi la bande passante sous contrôle.

Fish-Net dispose également d'un cycle officiel de support à long terme (LTS) et d'une garantie de stabilité sur les mises à jour d'API, ce qui signifie que vous pouvez mettre à niveau vos versions sans craindre de casser votre code existant. Il utilise une architecture d'API instanciée plutôt qu'un singleton, ce qui permet à un seul exécutable d'agir comme plusieurs serveurs ou de se connecter simultanément à plusieurs serveurs. Cela s'avère précieux pour les architectures plus avancées.

Quelques autres détails pratiques : Fish-Net prend en charge les transports sans allocation pour de meilleures performances de garbage collection à grande échelle, des scènes empilées et additives (utiles pour les donjons instanciés ou les salles de jeu séparées sur un même serveur), ainsi qu'Unity Transport et Photon Transport prêts à l'emploi aux côtés de Steam et Epic.

Les avantages de Fish-Net Networking incluent une évolutivité renforcée, une charge serveur réduite et une robustesse accrue pour gérer les fluctuations du nombre de joueurs.

Parmi les jeux utilisant Fish-Net Networking, on compte Arcadius, Fight Action Sandbox, Reign of Dwarf, Cat Warfare, Skygard Arena, et bien d'autres, tant déjà sortis qu'en cours de production.

Bonnes pratiques pour le Netcode

  1. Optimiser pour la latence : Mettez en œuvre des techniques telles que la compensation de latence et la prédiction pour contrer les problèmes de latence.

  2. Mesures de sécurité : Mettez régulièrement à jour votre netcode pour vous protéger contre de nouvelles vulnérabilités et les tricheries. Les attaquants adorent cibler les bibliothèques les plus populaires, car elles exposent le plus grand nombre d'utilisateurs.

  3. Architecture évolutive : Concevez votre netcode pour qu'il soit évolutif, capable d'accueillir un nombre croissant de joueurs de manière fluide. Réduisez au minimum le nombre d'objets et de propriétés nécessitant une synchronisation, et prenez en considération le pire scénario possible permis par la conception de votre jeu.

  4. Boucles de rétroaction : Mettez en place des mécanismes de retour d'information pour surveiller les performances et les expériences des joueurs, permettant ainsi une amélioration continue.

  5. Tester régulièrement : Implémentez vos tests de bout en bout et vos tests de charge de manière à pouvoir les réexécuter facilement à chaque modification majeure de votre jeu, afin d'avoir la certitude que votre prochaine mise à jour ne générera pas de mauvaises évaluations.

Conclusion

Maîtriser le netcode est un parcours semé de défis et d'opportunités d'apprentissage.

En choisissant le bon netcode, en comprenant les outils d'Unity, en suivant les meilleures pratiques et en tirant parti des ressources disponibles, vous pouvez créer des expériences multijoueurs captivantes et fluides.

Après avoir sélectionné votre netcode, la prochaine étape pour mettre votre jeu en ligne sera de décider de son hébergement. Heureusement, Edgegap propose des intégrations au sein des plugins populaires, notamment Mirror, Fish-Net et PurrNet. Regardez les vidéos ci-dessus, ou consultez leurs documentations respectives.

--

Les données de comparaison des fonctionnalités pour Mirror et Fish-Net proviennent en partie d'une feuille de calcul des solutions réseau Unity maintenue par la communauté (la feuille de calcul a été révisée pour la dernière fois en avril 2025, elle n'est plus activement maintenue).

Écrit par

Vincent Archambault, CSO chez Edgegap

Intégrer Edgegap facilement en quelques minutes

Commencez l'intégration maintenant!

Mettez votre jeu en ligne facilement
& en quelques minutes