Mise à jour du livre électronique : Plus de modèles de conception et de principes SOLID

À l'automne 2022, nous avons lancé l'e-book Améliorez votre code avec des modèles de programmation de jeuxainsi qu'un dépôt GitHub contenant des exemples de code. Nous avons également publié une série de tutoriels vidéo en cinq parties pour accompagner le livre électronique et l'exemple de projet.
Nous avons reçu d'excellents commentaires sur ces ressources, et nombre d'entre vous nous ont demandé de couvrir d'autres modèles de conception. Merci de nous avoir fait part de vos commentaires. Mon équipe et moi-même suivons de près vos commentaires et nous les apprécions vraiment.
Aujourd'hui, je suis heureux d'annoncer qu'une édition mise à jour de l'e-book, Level up your code with design patterns and SOLID, est désormais disponible, avec une version mise à jour du projet d'exemple de design patterns, que vous pouvez télécharger depuis l'Unity Asset Store.
L'e-book et le projet d'exemple sont désormais basés sur Unity 6 et comprennent davantage d'exemples et de modèles. L'exemple de projet inclut également d'autres fonctionnalités d'UI Toolkit, notamment un exemple qui démontre la liaison de données, une demande populaire de la part de la communauté.
Remarque: Unity 6 sera disponible dans le courant de l'année. Si vous souhaitez suivre les exemples du guide et le projet de démonstration qui l'accompagne, assurez-vous de télécharger Unity 6 Preview.

Avant de se plonger dans le nouveau contenu de l'e-book, certains d'entre vous qui sont moins familiers avec les concepts peuvent se poser des questions : Pourquoi devrais-je me familiariser avec les modèles de conception et comment s'intègrent-ils dans le développement de jeux Unity ?
Pour en revenir à vos commentaires, si les principes fondamentaux de la programmation orientée objet sont familiers à beaucoup, l'application de ces principes dans votre propre code peut parfois sembler abstraite et trop académique.
Pensez-y de la manière suivante : Pour chaque problème de conception de logiciel auquel vous êtes confronté, d'innombrables développeurs ont relevé des défis similaires avant vous. Bien que vous ne puissiez pas toujours leur demander directement des conseils, vous pouvez vous inspirer de leurs solutions grâce aux modèles de conception.
Les modèles de conception offrent des solutions générales à des problèmes courants dans le domaine du génie logiciel. Il ne s'agit pas de modèles prêts à l'emploi à copier et à coller dans votre code, mais plutôt d'outils dans votre boîte à outils que vous pouvez utiliser en cas de besoin. Certains modèles sont plus intuitifs que d'autres, mais chacun d'entre eux peut être utile dans chaque contexte.
Nous avons créé ce guide pour ceux qui découvrent les modèles de conception ou qui ont simplement besoin d'une remise à niveau. Il décrit des scénarios courants de développement de jeux dans lesquels ces modèles peuvent être appliqués. Si vous passez d'un autre langage orienté objet comme Java ou C++ à C#, vous trouverez des exemples pratiques sur la façon d'adapter ces modèles spécifiquement pour Unity.
À la base, les modèles de conception sont simplement des idées. Ils ne s'appliquent pas à toutes les situations, mais lorsqu'ils sont utilisés correctement, ils peuvent vous aider à créer des applications évolutives. En les intégrant dans vos projets, vous améliorerez la lisibilité et la maintenabilité du code. Au fur et à mesure que vous vous familiariserez avec ces modèles, vous identifierez les possibilités de rationaliser votre processus de développement.
En bref, notre guide est conçu pour élever vos compétences de codage et créer de meilleurs projets Unity et établir une compréhension des meilleures pratiques générales de l'industrie que vous pouvez transporter avec vous tout au long de votre carrière.

Examinons les principales nouveautés apportées aux ressources sur les modèles de conception :
Une section élargie sur la manière de mettre en œuvre les principes SOLID
Les cinq principes fondamentaux de la norme SOLID sont désormais assortis d'exemples de code réalisables, mis en œuvre dans le projet d'exemple expliqué dans le livre électronique. Pour rappel, SOLID est un acronyme mnémotechnique désignant cinq principes fondamentaux de la conception de logiciels - considérez-les comme cinq règles de base à garder à l'esprit qui peuvent vous aider à faire en sorte que les conceptions orientées objet soient compréhensibles, flexibles et faciles à maintenir.
Pour rappel, SOLID est l'abréviation de "SOLID" :
- Principe de responsabilité unique : Une classe ne doit avoir qu'une seule raison de changer, ce qui signifie qu'elle ne doit avoir qu'une seule tâche ou responsabilité.
- Principe de l'ouverture-fermeture : Les classes doivent être ouvertes à l'extension mais fermées à la modification, ce qui permet de les étendre sans modifier le code existant.
- Principe de substitution de Liskov : Les objets d'une superclasse doivent pouvoir être remplacés par des objets de ses sous-classes sans affecter la correction du programme.
- Principe de séparation des interfaces : Les clients ne doivent pas être contraints de dépendre d'interfaces qu'ils n'utilisent pas. Il favorise la création d'interfaces spécifiques plutôt que d'une interface unique à usage général.
- Principe d'inversion de la dépendance : Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau, mais tous deux doivent dépendre des abstractions.

Ce qu'il faut retenir de ces exemples, c'est que le respect de ces principes peut vous aider à obtenir les avantages suivants dans le développement de vos jeux :
- Lisibilité: Un code clair et bien organisé facilite la compréhension des fonctionnalités du projet. L'adhésion aux principes SOLID peut améliorer la lisibilité du code ; lorsque vos normes de code sont cohérentes, vous augmentez les chances d'une collaboration harmonieuse entre les programmeurs de jeux au sein d'une équipe.
- Évolutivité: La mise en œuvre des principes SOLID favorise la maintenance du code, ce qui est crucial pour les projets que l'on souhaite faire évoluer. En adhérant à ces principes, les modifications apportées à une partie de la base de code sont moins susceptibles d'introduire des problèmes inattendus ailleurs. Cette approche garantit que le code reste flexible et adaptable à l'évolution des besoins.
- Vitesse: En fin de compte, les principes SOLID contribuent à améliorer les processus de développement des jeux. Le code modulaire, un aspect clé mis en avant par SOLID, implique la décomposition des systèmes en composants plus petits et plus faciles à gérer. Cette approche modulaire facilite les tests, le débogage et la réutilisation du code dans les différents projets, ce qui permet de réduire le temps de développement et d'améliorer la productivité.

Le livre électronique et le projet mis à jour comprennent quatre nouveaux motifs, ce qui porte le total à 11. Voici un bref aperçu de chacun d'entre eux :
- Modèle d'usine : Un cas d'utilisation classique est celui des bonus (tels que les accélérateurs, les boucliers ou les vies supplémentaires), qui partagent plusieurs attributs tout en ayant des fonctionnalités différentes. Ici, le modèle d'usine peut être utilisé pour créer des instances de ces différentes classes de powerups dérivées d'une interface commune ou d'une classe de base, ce qui permet l'ajout flexible de nouveaux powerups sans modifier le code client existant.
- Mise en commun d'objets: Pour certains, il s'agit d'une technique d'optimisation des performances plutôt que d'un modèle de conception. Dans tous les cas, il s'agit d'un moyen d'améliorer les performances en réutilisant les objets au lieu de les créer et de les détruire fréquemment. Dans notre exemple de scène, vous trouverez un exemple de tourelle d'artillerie tirant de grandes quantités de balles à une vitesse rapide. Plutôt que de les instancier (et de les nettoyer une fois qu'ils ont rempli leur fonction avec un coût de performance significatif) à chaque fois, nous utilisons le modèle pour les recycler encore et encore.
- Singleton : Le singleton est probablement l'un des modèles les plus courants dans le développement de jeux - il y a de fortes chances que vous l'utilisiez déjà aujourd'hui. Il est utile si vous avez besoin d'un objet qui coordonne les actions dans l'ensemble de la scène. Par exemple, vous pourriez vouloir un gestionnaire de jeu dans votre scène pour diriger la boucle principale du jeu. Cependant, il y a quelques pièges à éviter lors de l'utilisation du modèle singleton, que nous expliquons dans le guide.
- Modèle de commande : Vous avez probablement déjà vu ce modèle de commande à l'œuvre si vous avez joué à un jeu qui utilise la fonctionnalité annuler/refaire ou qui conserve l'historique de vos saisies dans une liste. Il s'agit d'un modèle que vous pouvez exploiter pour un jeu de stratégie, par exemple, où l'utilisateur peut planifier plusieurs tours avant de les exécuter réellement dans l'ordre où les données ont été fournies.
- Modèle d'État : Cela permet à un objet de modifier son comportement lorsque son état interne change, ce qui simplifie la gestion d'un comportement complexe dépendant de l'état dans les personnages de jeu ou les éléments d'interface utilisateur. Pensez à un PNJ ennemi qui a différents comportements tels que "inactif", "en patrouille" ou "en attaque", qui dépendent de différents scénarios de jeu tels que l'endroit où le joueur se trouve sur la carte.
- Modèle d'observateur: Ce modèle vous aide à mettre en œuvre un système d'événements efficace dans lequel les objets peuvent s'abonner et réagir aux événements de manière dynamique. Un cas d'utilisation est celui d'un joueur qui collecte des munitions dans un jeu d'action qui déclenche différents événements tels que la diffusion d'un son, la mise à jour de l'interface utilisateur et la diffusion d'une animation.
- Présentateur de vues modèles (MVP) : À la base, ce modèle consiste à découpler l'affichage de l'état de l'état réel, ce qui permet une conception réactive dans laquelle les vues sont automatiquement mises à jour en réponse aux changements du modèle, ce qui en fait un modèle courant dans la programmation de l'interface utilisateur. Le modèlereprésente les données, la vuel'interface utilisateur et le présentateurun médiateur qui gère la logique de la vue et synchronise les données du modèle.
- Modèle-vue-vue-modèle (nouveau) : Comme son nom l'indique, ce modèle est lié au modèle MVP mais l'étend en ajoutant une liaison de données au moment de l'exécution, ce qui simplifie la mise à jour des éléments de l'interface utilisateur. Dans notre exemple, nous tirons parti de la nouvelle fonctionnalité de liaison de données dans Unity UI Toolkit et Unity 6 Preview.
- Modèle de stratégie (nouveau): Ce modèle définit une famille d'algorithmes en encapsulant chacun d'entre eux, afin de les rendre interchangeables, ce qui permet à l'algorithme de varier indépendamment des clients qui l'utilisent. Il s'agit d'un modèle utile pour mettre en œuvre différents comportements de mouvement dans l'IA d'un jeu, par exemple.
- Modèle poids plume (nouveau): Ce modèle permet d'optimiser l'utilisation de la mémoire en partageant autant de données que possible avec des objets similaires. L'idée de base est de centraliser les données partagées entre les objets.
- Dirty Flag (nouveau) : Ce modèle permet d'optimiser les performances en marquant les objets comme "sales" lorsqu'ils changent, de sorte qu'ils ne sont recalculés ou mis à jour que lorsque c'est nécessaire. Ce modèle peut vous aider à gérer les mises à jour coûteuses dans les boucles de jeu ou dans certains cas de rendu d'interface utilisateur.

L'exemple de projet reflète l'e-book en démontrant chacun des 11 modèles en action. Vous pouvez télécharger le projet sur The Asset Store et suivre les scènes correspondantes pour voir ces modèles appliqués dans des scénarios réels. Notez que le projet nécessite Unity 6 Preview ou une version ultérieure.
Avant de vous lancer dans le projet, il convient de garder à l'esprit quelques conseils utiles.

Commencez par la scène Bootstrap. Cette scène configure la démo et donne accès au menu principal (vous pouvez en savoir plus sur le concept de SceneBootStrapper dans l'e-book). A partir du menu principal, vous pouvez naviguer vers l'échantillon approprié. Chaque scène illustre un principe ou un modèle de conception SOLID différent.

Veuillez noter qu'il peut y avoir des différences mineures entre l'exemple de projet et les exemples de code dans le guide. Pour plus de clarté et de lisibilité, certains exemples présentent un code simplifié, comme les champs publics.
Votre équipe peut préférer un style de codage différent des conventions utilisées dans ce guide ou dans l'exemple de projet. Nous vous recommandons de créer un guide de style C# adapté à vos besoins spécifiques et de le suivre de manière cohérente au sein de l'équipe. Pour en savoir plus, consultez notre livre électronique sur la création de votre propre guide de style.
Examinez les exemples fournis et déterminez le modèle de conception qui correspond le mieux aux besoins de votre projet. En vous familiarisant avec ces modèles, vous découvrirez qu'ils peuvent rationaliser et améliorer votre processus de développement.
Le livre électronique et l'exemple de projet sur l'utilisation des modèles de conception peuvent être téléchargés gratuitement :
Bon codage !