

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

Le développement de jeux est complexe, ses composants étant souvent nombreux et aussi complexes à comprendre qu'ils sont nommés. Dans ce guide, nous visons à démystifier la complexité des services, outils et technologies de jeu pour les débutants et les développeurs indépendants.
Commençons par l'élément primordial pour les jeux multijoueurs : le netcode.
Comprendre le netcode est crucial pour créer des expériences multijoueurs engageantes et transparentes. Voyons ce que c'est, pourquoi c'est important et 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 configurations multijoueurs. C'est la technologie responsable de l'échange de données entre les appareils des joueurs et les serveurs de jeu, ce que l'on appelle la « synchronisation », et elle 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 est 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 de machine obsolètes ou sous-optimales des joueurs, s'efforçant d'offrir une expérience de jeu juste 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
Sélectionner le netcode approprié est une décision charnière dans le développement de jeux. Le choix dépend en grande partie du genre de votre jeu, de ses mécanismes de jeu et de la base de joueurs attendue.
Modèles Client-Serveur vs. Peer-to-Peer (P2P) : Le P2P est souvent utilisé dans les jeux plus petits, moins sensibles à la latence et généralement non compétitifs. Il connecte les joueurs directement, réduisant le besoin d'un serveur central. En contraste, 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 une autorité de serveur tierce pour appliquer les règles du jeu et 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.
Prendre en compte le genre de jeu : Les jeux au rythme effréné comme les jeux de tir exigent un netcode plus robuste pour gérer les actions rapides des joueurs et garantir 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.
É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 une facture massive chez votre fournisseur d'hébergement.
Sécurité et jeu équitable : Assurez-vous que votre netcode peut déjouer les tricheurs et les hacks courants afin de maintenir un terrain de jeu équitable.
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 un netcode appelée Netcode for GameObjects. Décomposons les étapes de base :
Comprendre le Netcode d'Unity : Unity fournit un ensemble robuste d'outils pour la mise en réseau. Familiarisez-vous avec les composants réseau d'Unity, tels que NetworkManager et NetworkIdentity.
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 les premières étapes.
Synchroniser des GameObjects : Apprenez à synchroniser des objets de jeu sur différents clients. Cela inclut les personnages des joueurs et les éléments interactifs du monde du jeu.
Gérer les entrées des joueurs : Assurez-vous que les entrées des joueurs sont communiquées de manière efficace et reflétées sur tous les clients.
Tester : Testez régulièrement votre netcode dans diverses conditions de réseau pour garantir la fiabilité et les performances.
Aller plus loin : Les meilleures alternatives de Netcode
Unity for GameObjects est connu pour avoir des limites strictes. Plus précisément, trois solutions de netcode créées par la communauté se sont imposées et apportent chacune des améliorations significatives aux développeurs de jeux. Deux sont des projets open-source établis de longue date : le vétéran de 10 ans Mirror Networking et Fish-Net Networking. Le troisième, PurrNet, est un nouvel arrivant qui gagne du terrain pour sa conception conviviale pour les développeurs.
Mirror Networking
Mirror est la plus ancienne bibliothèque réseau open source pour Unity, issue de l'ancien UNET qu'Unity fournissait nativement. Elle fonctionne sur une topologie client-serveur avec autorité de serveur, ce qui signifie que le serveur est la source de vérité pour l'état du jeu — une condition préalable pour tout jeu nécessitant une protection anti-triche efficace.
Mirror est un projet open source certifié OSI, largement documenté et soutenu par une grande communauté. Il est livré avec une prise en charge de la compensation du décalage (utile pour l'enregistrement des tirs dans les FPS), de la zone d'intérêt (pour contrôler quels clients reçoivent des mises à jour sur quels objets), des transports Steam et Epic, de la prise en charge de WebSocket pour les builds WebGL, et du transport multiplex pour qu'un seul serveur puisse accepter simultanément des clients sur différents transports.
Quelques points à savoir avant de vous lancer. Mirror utilise une conception d'API singleton, ce qui signifie qu'une seule instance du cœur réseau peut s'exécuter par exécutable. C'est parfait pour la plupart des jeux, mais cela limite certaines architectures avancées. Il n'y a pas non plus de suivi formel du support à long terme (LTS) : par le passé, l'API a évolué à un rythme qui peut nécessiter des mises à jour du code entre les versions. Pour un jeu en cours de développement, cela signifie qu'il faut surveiller de près le journal des modifications.
Parmi les jeux bien connus utilisant Mirror Networking, on trouve Population: ONE, Zoomba (100 millions de téléchargements sur Google Play) et Unleashed développé par d'anciens créateurs de World of Warcraft.
PurrNet
PurrNet est une bibliothèque réseau Unity gratuite et open source, créée par des développeurs qui estimaient que les solutions existantes allaient à l'encontre du flux de travail naturel d'Unity au lieu de l'adopter. L'idée de base est simple : si vous savez déjà utiliser Unity et le C#, vous devriez pouvoir créer des jeux multijoueurs sans avoir à apprendre une méthode de travail totalement différente.
Plusieurs éléments se distinguent. Tout d'abord, l'apparition (spawning) et la disparition (despawning) fonctionnent exactement comme dans Unity. Vous appelez Instantiate() et Destroy(), et PurrNet gère la mise en réseau. Pas d'appels spécifiques, pas d'étapes supplémentaires. Deuxièmement, l'autorité est contrôlée via un unique scriptable object Network Rules plutôt que d'être intégrée dans le code de votre jeu, ce qui signifie que vous pouvez prototyper avec une autorité client complète et basculer vers une autorité serveur plus tard sans rien réécrire. Troisièmement, il n'y a pas d'étape de baking. Les ID de scène sont calculés au moment de l'exécution à partir de l'ordre hiérarchique, 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 utilisant d'autres solutions sont régulièrement confrontés.
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, de la même manière qu'async/await fonctionne en C# standard. Il est également livré avec un système de données de joueur persistantes (son système de "cookie") qui permet au serveur de reconnaître un joueur qui se reconnecte comme étant la même personne, sans aucun code personnalisé.
PurrNet est 100 % gratuit, sans offre payante. Il n'y a pas de partage des revenus, pas de coût initial et aucune fonctionnalité essentielle n'est bloquée derrière un accès payant.
Edgegap propose un tutoriel d'intégration complet pour PurrNet qui montre 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 qui souhaitent des outils gérés par la communauté capables de suivre le rythme des types de jeux les plus exigeants.
Là où Mirror reste simple, Fish-Net affirme aller plus loin. Il inclut une prédiction côté client pour les transforms et les rigidbodies — le genre de fonctionnalité qui compte lorsque vous créez des jeux compétitifs au rythme effréné où les mouvements doivent sembler immédiats tandis que le serveur conserve l'autorité. La compensation du décalage est disponible (comme fonctionnalité payante) pour un enregistrement précis des tirs quelle que soit la latence du joueur. Pour les mondes de jeu plus vastes, la prise en charge des zones d'intérêt vous permet de contrôler exactement quels clients reçoivent des mises à jour sur quels objets, ce qui permet de maîtriser la bande passante.
Fish-Net propose également un suivi de support à long terme (LTS) formel et une garantie de stabilité sur les mises à jour de l'API, ce qui signifie que vous pouvez mettre à jour les versions sans craindre de casser votre code existant. Il utilise une conception 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 à plusieurs serveurs simultanément. Cela est important pour les architectures plus avancées.
Quelques autres détails pratiques : Fish-Net prend en charge des transports sans allocation pour de meilleures performances de ramasse-miettes (garbage collection) à grande échelle, des scènes superposées et additives (utiles pour des donjons instanciés ou des salles de jeu distinctes sur un seul serveur), ainsi que 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 meilleure évolutivité, une charge serveur réduite et une robustesse accrue dans la gestion des fluctuations du nombre de joueurs.
Les jeux utilisant Fish-Net Networking incluent 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 en matière de Netcode
Optimiser pour la latence : Mettez en œuvre des techniques telles que la compensation du décalage et la prédiction pour contrer les problèmes de latence.
Mesures de sécurité : Mettez régulièrement à jour votre netcode pour vous protéger contre de nouvelles vulnérabilités et tricheries. Les attaquants adorent cibler les bibliothèques les plus populaires car elles exposent le plus grand nombre de joueurs.
Architecture évolutive : Concevez votre netcode pour qu'il soit évolutif, afin d'accueillir un nombre croissant de joueurs de manière fluide. Minimisez le nombre d'objets et de propriétés à synchroniser, et envisagez le pire scénario possible que la conception de votre jeu permet.
Boucles de rétroaction : Mettez en place des mécanismes de rétroaction pour surveiller les performances et l'expérience des joueurs, permettant une amélioration continue.
Tester souvent : Mettez en œuvre vos tests de bout en bout et vos tests de charge de manière à pouvoir les rejouer facilement chaque fois que vous apportez des modifications majeures à votre jeu, afin d'avoir l'assurance que votre prochaine mise à jour ne vous vaudra pas de mauvaises critiques.
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 bonnes pratiques et en utilisant les ressources disponibles, vous pouvez créer des expériences multijoueurs engageantes et fluides.
Après avoir sélectionné votre netcode, la prochaine étape pour mettre votre jeu en ligne sera de décider de l'hébergement. Heureusement, Edgegap s'intègre avec des plugins populaires tels que Mirror, Fish-Net, et PurrNet. Regardez les vidéos ci-dessus ou consultez leurs documentations respectives.
--
Les données de comparaison de fonctionnalités pour Mirror et Fish-Net proviennent en partie d'un tableau comparatif des solutions réseau Unity géré par la communauté (ce tableau a été examiné pour la dernière fois en avril 2025 et n'est plus activement mis à jour).
Écrit par
Vincent Archambault, CSO chez Edgegap










