Construire mon premier jeu multijoueur avec Netcode for GameObjects

ESTEBAN MALDONADO / UNITY TECHNOLOGIESSenior Developer Advocate, Multiplayer Solutions
Oct 26, 2022|13 Min
Construire mon premier jeu multijoueur avec Netcode for GameObjects
Cette page a été traduite automatiquement pour faciliter votre expérience. Nous ne pouvons pas garantir l'exactitude ou la fiabilité du contenu traduit. Si vous avez des doutes quant à la qualité de cette traduction, reportez-vous à la version anglaise de la page web.

Je m'appelle Esteban Maldonado et je suis un défenseur des développeurs pour Unity. Mon travail consiste à faire connaître Unity Gaming Services et à créer de nouveaux supports éducatifs afin que les développeurs puissent commencer à utiliser les outils pour leur propre parcours de développement multijoueur.

Une de ces solutions est Netcode for GameObjects (NGO), une bibliothèque de mise en réseau de niveau intermédiaire développée pour le moteur de jeu Unity. Une solution de netcode est essentielle dans tout projet de développement multijoueur.

Une des responsabilités d'un défenseur des développeurs chez Unity est de créer des jeux d'exemple qui mettent en valeur nos outils, et un exemple NGO m'a été assigné – Galactic Kittens.

Cependant, bien que j'aie eu ma part de missions professionnelles dans l'industrie du jeu, j'ai personnellement peu d'expérience dans la création de jeux multijoueurs – donc cela allait s'avérer être non seulement une opportunité d'apprentissage pour les développeurs qui utilisent l'exemple, mais aussi une expérience d'apprentissage pour moi lors de la création du jeu en premier lieu.

Avec mon équipe, nous avons développé le concept de Galactic Kittens – le niveau de difficulté de l'exemple, les mécaniques de base, les capacités des personnages (qui ont ensuite été supprimées), et plus encore.

Pour aborder ce projet de jeu d'exemple, j'ai uni mes forces avec l'équipe talentueuse de Bromio afin de donner vie à ce jeu d'exemple avec des ressources artistiques soignées, de la musique et des effets sonores, ainsi qu'un soutien en programmation. Notre objectif commun était de fournir aux développeurs une introduction simple et conviviale à la création d'un jeu multijoueur dans Unity avec Netcode for GameObjects.

Dans ce blog, je vais couvrir le parcours de développement de Galactic Kittens, du prototype à la version stable, et comment vous pouvez tirer parti de cet exemple pour commencer votre propre projet multijoueur.

Qu'est-ce que Galactic Kittens ?

Avant de plonger dans son développement, voici un aperçu rapide de notre nouveau jeu d'exemple Galactic Kittens. Cet exemple est une aventure spatiale coopérative en 2D conçue pour vous aider à apprendre quelques bases du réseautage multijoueur.

L'exemple est destiné à vous enseigner les techniques nécessaires pour commencer le développement multijoueur, telles que :

  • Gestion de session réseau, avec changement de scène automatique
  • Synchronisation de mouvement 2D de base, y compris les changements de feuilles de sprites
  • Génération d'objets de jeu à l'exécution, côté serveur
  • Transfert de propriété des joueurs principaux du serveur à son client
  • Création de VFX sur tous les clients connectés
  • Comment jouer des effets sonores et de la musique à tous les clients
  • Communiquer les statistiques des joueurs et du jeu (santé, ennemis vaincus, etc.) et les afficher sur l'interface utilisateur du jeu

Vous pouvez en apprendre davantage sur Galactic Kittens sur notre site web, ou télécharger l'échantillon directement depuis GitHub pour commencer à explorer le code.

Comment Galactic Kittens a-t-il été construit ?
Apprendre en développant

Bien que je n'aie pas beaucoup d'expérience dans la création de jeux multijoueurs, Unity dispose de nombreuses ressources publiques pour aider les utilisateurs à commencer à utiliser NGO.

Avec ces ressources, j'ai commencé très simplement en me familiarisant avec les concepts et la terminologie de base du réseau, en utilisant notre documentation Unity Multiplayer. Ensuite, j'ai suivi les tutoriels du projet Hello World et étudié les exemples courts disponibles pour commencer à obtenir des résultats.

Après quelques essais et erreurs, j'ai pu créer un prototype de base simple à partir de zéro.

Oui, c'est ma première tentative de faire exister Galactic Kittens.

À ce stade, il n'y avait pas de lobby personnalisé, pas de véritable interface utilisateur, pas de gestion de connexion réelle – vous voyez le tableau. Le prototype était juste deux vaisseaux égaux (avec trois points de vie chacun) qui se déplaçaient à l'écran et tiraient une balle cubique lorsque vous appuyiez sur la barre d'espace. C'était juste assez pour montrer le spawn d'objets et la synchronisation des mouvements entre les clients.

C'était un début, mais je savais que Bromio nous aiderait à atteindre la ligne d'arrivée et à transformer cela en un échantillon fonctionnel.

Du prototype à l'exploration spatiale

Après mes progrès initiaux, j'ai commencé à travailler avec Bromio pour développer le prototype en quelque chose de plus prêt pour la production. Comme moi, ils n'avaient pas beaucoup d'expérience dans la création de jeux multijoueurs, mais ils ont relevé le défi et nous ont aidés à atteindre notre objectif.

Pour travailler plus efficacement, nous avons décomposé le jeu en composants isolés pour commencer le développement en parallèle – avec des artistes travaillant sur les ressources et des programmeurs travaillant sur la logique de base du jeu.

Voici un aperçu de l'évolution du style artistique dans Galactic Kittens.

Pendant ce temps, le développeur principal de Bromio et moi découvrions des aspects amusants et stimulants de la création de Galactic Kittens en un échantillon de jeu fonctionnel.

Gestion de connexion

Un des plus grands défis du développement était la gestion de connexion et la sélection de personnages. Nous devions stocker les données des personnages dans des fichiers séparés ScriptableObject, que vous verrez lorsque vous téléchargerez le projet.

Ces fichiers contiennent les informations nécessaires sur chaque explorateur spatial, y compris quels sprites (joueur et vaisseau) afficher sur l'interface utilisateur et les prefabs qui doivent être générés pour chaque joueur une fois que la scène de jeu commence.

Sur l'écran de sélection de personnage, un grand défi était de s'assurer de reconnaître l'événement de déconnexion d'un client et de gérer cet événement à travers l'interface utilisateur.

Nous avons décidé que les utilisateurs ne devraient pas pouvoir choisir le même personnage, afin de montrer comment les développeurs pouvaient réellement faire cela dans leurs propres jeux. (Il est en fait plus facile de laisser les joueurs choisir le même personnage puisque cela n'implique pas de restriction supplémentaire.)

Écran de sélection de personnage du jeu d'exemple Galactic Kittens.

Le prochain défi pour la gestion de connexion était l'événement de déconnexion des joueurs en plein milieu d'une session de jeu. Cela signifiait non seulement que le jeu devait s'adapter aux départs des joueurs, mais aussi qu'il devait bloquer d'autres joueurs d'entrer pendant qu'une partie est en cours. Nous avons décidé de faire en sorte que le gestionnaire de connexion n'autorise de nouvelles connexions que lorsque l'instance hôte est sur l'écran de sélection de personnage. Ce n'est pas une solution universelle – d'autres jeux peuvent permettre aux joueurs de rejoindre tard dans une session en cours, tandis que d'autres jeux peuvent ne pas le faire – c'est aux développeurs de décider ce qui est le mieux pour leur expérience.

Ennemis de base

Nous voulions garder le gameplay simple, sans IA complexe ni logique de comportement sophistiquée pour les ennemis ou les météorites que les joueurs voient. De cette façon, nous pouvions fournir un échantillon de jeu complet sans détourner l'attention de la démonstration de l'utilisation de la bibliothèque NGO.

Ainsi, il y a deux types principaux d'ennemis et un obstacle de météorite :

Météorite Space Shooter Space Ghost

Les deux ennemis choisissent un motif de mouvement aléatoire, tandis que l'ennemi Space Shooter est le seul qui tire réellement des lasers ennemis en retour. Veuillez vous référer à notreguide du développeur pour plus d'informations sur la façon dont ces ennemis sont construits et comment vous pouvez ajouter votre propre logique.

Le combat de boss

Au moment où nous avons travaillé sur le combat de boss, toutes les leçons apprises de la mise en œuvre du lobby du jeu, du comportement des vaisseaux spatiaux des joueurs et des ennemis simples nous ont aidés à construire rapidement l'expérience finale du combat de boss.

Un défi particulier était de chronométrer l'alarme d'avertissement que vous entendez et voyez avant l'entrée du boss. À la fin, nous avons envoyé des événements avec client et serveur RPCs afin de signaler que l'expérience de jeu régulière était terminée et que le combat final de boss allait commencer.

GIF d'avertissement du jeu d'échantillon Galactic Kittens

Le comportement du boss est structuré comme une machine à états finis (FSM) qui sélectionne aléatoirement quel ensemble d'attaques lancer aux joueurs connectés. Pour ce faire, nous avons utilisé une classe C# appelée BossController, qui gère la transition d'un état de boss à un autre. Consultez le guide du développeur pour des informations sur le code derrière ce combat, et comment vous pouvez ajouter vos propres états de boss.

Qu'est-ce qui nous a aidés en cours de route ?
La communauté multijoueur

La ressource n°1 qui nous a aidés à réussir notre mission de construire ce jeu d'échantillon était de rejoindre le serveur Discord de Multiplayer Networking Unity et de poser des questions à la communauté. Ici, nous avons pu parler avec d'autres développeurs qui créent des jeux multijoueurs et également discuter avec les créateurs de services multijoueurs Unity. Le pool collectif de connaissances était plus que suffisant pour nous aider à atteindre la ligne d'arrivée.

La documentation multijoueur

Travailler chez Unity signifie que je peux collaborer avec des personnes expertes en réseau qui travaillent dur pour développer des ressources utiles et de la documentation conçue pour aider tout le monde à commencer avec le développement multijoueur. Le site de documentation multijoueur Unity a été utile de nombreuses fois – pour me familiariser avec la terminologie de mise en réseau de base à la gestion de la latence jusqu'à réellement coder avec NGO.

Qu'apprenons-nous ensuite ?

Nous sommes définitivement excités à propos de Galactic Kittens. Nous aimerions que vous, et les futurs utilisateurs de NGO, utilisiez cet échantillon comme un pas dans la bonne direction vers votre parcours d'apprentissage multijoueur. N'hésitez pas à nous contacter sur le serveur Discord ou les forums pour poser des questions ou fournir des retours et des suggestions.

Une des choses que j'ai hâte d'apprendre est comment ajouter pooling d'objets à un échantillon de jeu multijoueur. C'est la technique qui vous permet de pré-allouer la mémoire nécessaire pour les objets qui sont générés plusieurs fois pendant une session de jeu. Dans une expérience antérieure, j'ai essayé cette technique dans un projet Unity hors ligne et cela peut certainement améliorer l'efficacité d'exécution de votre jeu. Nous avons appliqué cette technique à Salle de Boss et à d'autres exemples UGS également.

Comment pouvez-vous commencer à apprendre le développement multijoueur ?

Si vous débutez votre propre parcours multijoueur, il existe de nombreuses ressources que mon équipe chez Unity fournit pour vous aider à rendre cela plus facile.

Je recommanderais de commencer par la page Netcode for GameObjects, où vous pouvez vous familiariser avec le package. Ensuite, vous pouvez explorer NGO à travers l'Kittens Galactiquesexemple ou faire de petits pas avec des exemples en morceaux.

Une fois que vous êtes en route, je recommande de rejoindre le serveur Discord Unity Multiplayer Networking et de consulter les forums. Et, si vous pensez que Kittens Galactiques est trop simple ou pas assez difficile, je vous encourage définitivement à consulter Salle de Boss, qui est un jeu d'exemple 3D complet qui amène le développement NGO à un niveau prêt pour la production.

Pour mettre votre jeu en ligne, Unity Gaming Services peut vous aider encore plus – que vous cherchiez à ajouter les services Lobby ou Matchmaker, le chat vocal et textuel avec Vivox, ou même des solutions d'hébergement comme le service P2P Relay ou Hébergement de Serveur de Jeu. Bonne création !

Pour en savoir plus sur les tendances récentes et l'avenir du multijoueur, lisez le Rapport sur le Multijoueur Unity 2022, qui agrège les résultats de plus de 1 500 réponses à des enquêtes aux États-Unis, au Royaume-Uni, au Japon et en Corée.