

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

Le développement de jeux est complexe, ses composants sont 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 crucial pour les jeux multijoueurs : le netcode.
Comprendre le netcode est essentiel pour créer des expériences multijoueurs engageantes et fluides. Voyons ce que c'est, pourquoi c'est important, et les implémentations de netcode les plus simples et les plus efficaces disponibles dans Unity aujourd'hui.
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 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 est un défi en raison des latences variables et de la qualité des connexions que rencontrent les joueurs à travers le monde. Un netcode efficace tient compte des configurations de machines obsolètes ou sous-optimales des joueurs, 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
Sélectionner le netcode approprié est une décision charnière dans le développement d'un jeu. Le choix dépend en grande partie du genre de votre jeu, de ses mécaniques de jeu et du public cible attendu.
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 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 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 de prédiction 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 massivement la facture chez votre hébergeur.
Sécurité et fair-play : Assurez-vous que votre netcode peut déjouer les tricheries et les hacks courants afin de maintenir un terrain de jeu équitable.
Créer un jeu multijoueur : Utiliser le netcode pour la première fois
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 :
Comprendre le Netcode d'Unity : Unity fournit un ensemble d'outils robustes pour le 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 les GameObjects : Apprenez à synchroniser les 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 commandes des joueurs soient communiquées et répercutées efficacement sur tous les clients.
Tester : Testez régulièrement votre netcode dans diverses conditions de réseau pour garantir sa fiabilité et ses performances.
Aller plus loin : Les meilleures alternatives de netcode
Il est bien documenté qu'Unity for GameObjects présente 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 grâce à sa conception conviviale pour les développeurs.
Mirror Networking
Mirror est la bibliothèque réseau open-source la plus ancienne pour Unity, issue de UNET désormais obsolète qu'Unity intégrait nativement. Elle fonctionne sur une topologie client-serveur avec autorité du 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 sérieuse.
Mirror est un projet open source certifié OSI, largement documenté et soutenu par une grande communauté. Il intègre la prise en charge de la compensation du décalage (utile pour la détection des tirs dans les jeux de tir), de l'Area of Interest (pour contrôler quels clients reçoivent les mises à jour de quels objets), des transports Steam et Epic, de la prise en charge de WebSocket pour les builds WebGL, et du Multiplex Transport pour qu'un seul serveur puisse accepter simultanément des clients sur différents transports.
Quelques points à connaître avant de vous lancer. Mirror utilise un modèle d'API singleton, ce qui signifie qu'une seule instance du cœur de 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 canal formel de support à long terme (LTS) : l'API a historiquement évolué à un rythme qui peut nécessiter des mises à jour du code entre les versions. Pour un jeu en développement actif, cela implique de 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, conçue par des développeurs qui trouvaient que les solutions existantes allaient à l'encontre du flux de travail naturel d'Unity plutôt que de l'adopter. L'idée de base est simple : si vous savez déjà utiliser Unity et le C#, vous devriez être capable de créer des jeux multijoueurs sans avoir à apprendre une méthode de travail totalement différente.
Plusieurs éléments se démarquent. Tout d'abord, l'instanciation (spawn) et la destruction (despawn) fonctionnent exactement de la même manière que dans Unity. Vous appelez Instantiate() et Destroy(), et PurrNet gère la partie réseau. Pas d'appels de spawn 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 votre code de jeu, ce qui signifie que vous pouvez prototyper avec une autorité client totale, puis verrouiller le tout avec une autorité serveur plus tard sans rien réécrire. Troisièmement, il n'y a pas d'étape de génération (baking). Les ID de scène 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 que les développeurs rencontrent régulièrement avec d'autres solutions.
Du côté des RPC, PurrNet prend en charge les RPC génériques, statiques et asynchrones (awaitable). Les RPC asynchrones vous permettent d'appeler une méthode sur le serveur et d'attendre directement une valeur de retour, à l'instar du fonctionnement de async/await en C# classique. Il est également doté d'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 aucun code personnalisé.
PurrNet est 100 % gratuit, sans offre payante. Il n'y a pas de partage de revenus, pas de coût initial, et aucune fonctionnalité clé n'est verrouillée derrière un abonnement payant.
Edgegap propose un tutoriel d'intégration complet pour PurrNet qui explique 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 choix pour les développeurs qui souhaitent des outils maintenus par la communauté capables de suivre le rythme de types de jeux plus exigeants.
Là où Mirror garde les choses simples, Fish-Net affirme aller plus loin. Il intègre une prédiction côté client à la fois pour les transforms et les rigidbodies — le genre de fonctionnalité indispensable lorsque vous créez des jeux compétitifs rapides où les mouvements doivent sembler immédiats alors que le serveur conserve l'autorité. La compensation du décalage est disponible (en option payante) pour une détection précise des tirs, 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 précisément quels clients reçoivent les mises à jour de quels objets, limitant ainsi l'utilisation de la bande passante.
Fish-Net propose également un canal officiel de support à long terme (LTS) et une garantie de stabilité sur les mises à jour de l'API, ce qui signifie que vous pouvez mettre à niveau 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 de faire office de serveurs multiples ou de se connecter à plusieurs serveurs simultanément. C'est crucial pour les architectures plus avancées.
Quelques autres détails pratiques : Fish-Net prend en charge les transports sans allocation pour de meilleures performances du ramasse-miettes (garbage collector) à grande échelle, des scènes empilées et additives (utiles pour les donjons instanciés ou des salles de jeu distinctes sur un seul serveur), ainsi que Unity Transport et Photon Transport nativement, aux côtés de Steam et Epic.
Les avantages de Fish-Net Networking comprennent une meilleure évolutivité, une charge serveur réduite et une robustesse accrue lors de 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, qu'ils soient déjà sortis ou en cours de production.
Bonnes pratiques de netcode
Optimiser pour la latence : Implémentez 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 les nouvelles vulnérabilités et triches. Les attaquants adorent cibler les bibliothèques les plus populaires car elles exposent le plus grand nombre d'utilisateurs.
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 autorise.
Boucles de rétroaction : Implémentez des mécanismes de rétroaction pour surveiller les performances et l'expérience des joueurs, permettant ainsi une amélioration continue.
Tester souvent : Implémentez vos tests de bout en bout et vos tests de charge de manière à ce qu'ils soient faciles à relancer 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 é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 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 propose des intégrations au sein de 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'un tableau comparatif des solutions réseau Unity géré par la communauté (le tableau a été révisé pour la dernière fois en avril 2025, et n'est plus activement mis à jour).
Écrit par
Vincent Archambault, CSO chez Edgegap











