Que recherchez-vous ?
Games

Comment choisir le bon netcode pour votre jeu ?

BRANDI HOUSE / UNITY TECHNOLOGIESContributor
Sep 8, 2020|6 Min.
Comment choisir le bon netcode pour votre jeu ?

Presque tous les jeux multijoueurs doivent prendre en compte et résoudre les problèmes inhérents au réseau qui ont un impact sur l'expérience de jeu, tels que la latence, la perte de paquets et la gestion des scènes. Les jeux permettent de relever ces défis de différentes manières.

Le choix de la bonne solution dépend du genre de votre jeu, de la taille des joueurs et des objets en réseau, de la compétitivité et d'autres aspects, comme le degré de contrôle nécessaire sur la couche réseau. Différents scénarios requièrent différentes solutions en matière de code net.

Dans ce blog, nous présentons les bibliothèques de réseau courantes utilisées dans le moteur Unity, ainsi que les résultats d'une étude menée sur l'expérience des développeurs avec ces solutions, afin de vous aider à déterminer ce qui pourrait convenir à votre projet.

Qu'est-ce que le netcode ?

Le netcode est un terme de haut niveau que de nombreux ingénieurs utilisent pour désigner des cadres spécifiquement conçus pour faciliter la construction de certains aspects du jeu en réseau, comme la synchronisation des données ou la compensation du décalage.

Un cadre entièrement en réseau contient deux éléments essentiels :

1. Couche de transport (de base) qui gère l'ensemble du trafic et des paquets envoyés vers/depuis un client, un hôte ou un serveur.

2. Une couche d'abstraction de niveau supérieur qui simplifie les besoins courants en matière de jeux de réseau et s'intègre aux outils.

Souvent, une "solution netcode" fait référence à cette deuxième couche d'abstraction, car c'est là que vous implémentez votre gameplay en réseau et vos optimisations.

Les différentes solutions de netcode ont des limitations et des capacités différentes qui peuvent faciliter ou compliquer la création de votre expérience multijoueur. Il est important de savoir exactement ce que vous voulez construire et d'évaluer vos options avant de commencer, afin de réduire les remaniements qui pourraient être coûteux.

Les solutions netcode d'Unity

Unity dispose de deux solutions netcode différentes : Netcode for GameObjects et Netcode for Entities.

Netcode for GameObjects

Le paquet Netcode for GameObjects a été conçu pour vous aider à synchroniser plus facilement les scènes et les données GameObjects sur plusieurs clients et plateformes avec des modèles autorisés par le client ou le serveur. Le moteur Unity vous aide à optimiser vos jeux multijoueurs grâce à des outils permettant de profiler le réseau à la fois en mode lecture et au moment de l'exécution.

Vous pouvez également utiliser Relay d'Unity Gaming Services, un service d'accompagnement peer-to-peer rentable, pour développer des playtests et créer un jeu multijoueur sans avoir à investir dans un hébergement dédié.

Netcode for Entities

Élargir l'éventail des possibilités dans la prochaine version de Unity 2022 LTS. Ajoutez la possibilité de cibler les jeux d'action multijoueurs compétitifs avec le paquet Netcode for Entities basé sur ECS, conçu pour la performance et l'évolutivité. Vous pouvez viser un gameplay ambitieux qui fait autorité sur le serveur, avec prédiction, interpolation et compensation du décalage.

Optimisez vos coûts en utilisant un serveur dédié capable de supprimer automatiquement les ressources. Utilisez Unity Gaming Services pour héberger vos serveurs de jeux et bénéficiez d'une infrastructure résiliente et évolutive. Ainsi, vous pourrez vous concentrer sur l'offre d'une expérience optimale à vos joueurs.

Comment évaluer les différentes solutions en matière de code net

Unity a recueilli des commentaires sur certaines des solutions netcode tierces les plus utilisées, et nous avons créé un arbre de décision pour vous aider à choisir le framework qui vous convient le mieux.

Pour créer ces outils, nous avons recueilli et analysé des données provenant de trois sources :

  • Une enquête menée auprès de plus de 200 utilisateurs d'Unity a permis de recueillir des informations sur leurs expériences avec des frameworks de netcode spécifiques.
  • Plus de 20 entretiens approfondis avec des utilisateurs qui développent activement des jeux multijoueurs avec Unity
  • Apprentissages tirés des prototypes que nous avons construits avec MLAPI (maintenant connu sous le nom de Netcode for GameObjects), DarkRift 2, Mirror, et Photon Quantum.

Les clients ont noté et classé les meilleures solutions de netcode sur différents axes en se basant sur leur expérience.

1. Stabilité et soutien

La mise en réseau est complexe, c'est pourquoi le niveau de stabilité et d'assistance dont vous bénéficiez grâce à votre solution de code réseau est essentiel. La stabilité et le soutien de chaque solution de code réseau ont été évalués selon trois axes : la probabilité de bogues ou de pannes, le temps de réponse pour résoudre les problèmes ou aider à déboguer un défi, et la probabilité de changements radicaux dans les API.

2. Facilité d'utilisation

Nous avons compilé les évaluations des utilisateurs sur la facilité de prise en main et d'exécution des tâches courantes, y compris la fourniture d'échantillons, de documentation et de didacticiels de qualité, et l'offre par la solution d'API simples pour le prototypage.

3. Performances

Qui veut d'une solution peu performante ? Pour évaluer chaque solution de code réseau, nous avons cherché à limiter les GC/allocations, à minimiser la latence, à obtenir un calcul performant et, idéalement, à avoir la possibilité de faire du multithread.

4. Évolutivité

Selon le genre de jeu que vous souhaitez créer, l'évolutivité de la solution de code réseau est un élément important à prendre en compte. Comme pour les performances, nous avons évalué la capacité de la solution à prendre en charge un plus grand nombre de clients connectés sans sacrifier les performances.

5. Nombre de fonctionnalités

Il est important de disposer d'une solution de netcode complète pour prendre en charge les besoins spécifiques à un genre ou à un jeu de votre projet. Pour classer les solutions, nous nous sommes concentrés sur les fonctionnalités de niveau intermédiaire telles que la réplication d'objets et de variables, les RPC, la gestion des scènes, etc. Nous avons également recherché des caractéristiques de plus haut niveau telles que la prédiction et la compensation du décalage.

6. Tarif

Afin de budgétiser correctement votre solution de code net, nous avons également inclus des évaluations du coût de chaque solution. Cette considération tient compte à la fois du coût des bibliothèques/solutions et d'éventuels coûts cachés, tels que les frais généraux d'exploitation qui doivent être gérés séparément.

Quelle est la meilleure solution pour vous ?

Avant d'opter pour une solution de netcode, il est important de prendre quelques éléments en considération.

Tout d'abord, nous vous recommandons vivement de procéder à votre propre évaluation. Notre résumé des options les plus courantes peut être utile, mais vous devez également procéder à une évaluation basée sur les spécificités de votre jeu.

Deuxièmement, cette liste est basée sur une évaluation réalisée en 2020 et ne représente pas toutes les alternatives de solutions de netcode ou de couche de transport actuellement disponibles.

Enfin, réfléchissez à la quantité de travail et de maintenance supplémentaires liés au réseau que vous êtes prêt à assumer. Votre jeu a-t-il besoin d'une telle surcharge de réseau ?

Si vous construisez quelque chose d'occasionnel ou de coopératif qui ne nécessite pas une synchronisation parfaite de tous les états des joueurs sur tous les appareils, envisagez une solution de netcode avec moins de frais généraux et de coûts de développement comme Netcode for GameObjects.

Si vous créez un jeu plus rapide et orienté vers l'action, où les compétences physiques des joueurs sont mises en compétition, envisagez une solution comme Netcode for Entities. Il peut prendre en charge des éléments tels que la prédiction des clients et dispose d'une méthode de compensation du décalage.

Évaluation de la solution netcode 2020

Les informations ci-dessous sont un début, mais nous vous recommandons de télécharger également le rapport complet sur le netcode, où nous allons plus en détail sur ces solutions de netcode de tierces parties :

Remarque : Le PDF couvre les solutions les plus référencées par les clients, mais il en existe d'autres. Certains clients ont évoqué d'autres solutions pour lesquelles nous n'avons pas encore recueilli suffisamment de témoignages pour les évaluer, telles que Forge, Normcore, Bolt, LL (Enet, LiteNet, etc.). Nous vous encourageons à les ajouter à votre réflexion pour voir s'ils peuvent être une option pour votre installation.

Image
Débuter avec le développement multijoueur dans Unity

Que vous construisiez le prochain hit de la bataille royale ou une coopérative en ligne confortable, il est essentiel de comprendre les bases du réseau multijoueur et les solutions netcode à votre disposition.

Voir l'exemple de coopérativeBoss Room d'Unity pour un exemple de qualité de production d'un projet réalisé avec Netcode for GameObjects. Si vous cherchez un exemple de jeu multijoueur rapide et compétitif qui soit également performant sur le plan du réseau, consultez l'exemple ECS Network Racing d'Unity, construit avec le système de composants d'entités (Entities Component System). Pour voir un exemple de jeu qui utilise pleinement tout ce que l'hébergement de serveurs de jeux a à offrir, consultez l'exemple de Battle Royale construit avec Photon Fusion.

Bonne création.

Note de l'éditeur : Ce blog a été mis à jour en mars 2023 avec les dernières informations sur les solutions de netcode d'Unity afin de fournir plus d'informations utiles aux développeurs qui choisissent la bonne solution de netcode pour leur jeu. Les données du rapport datent encore de 2020.