paint-brush
Version Rider 2023.1 : découverte de nouvelles fonctionnalités pour les développeurs Unitypar@deniskondratev
1,921 lectures
1,921 lectures

Version Rider 2023.1 : découverte de nouvelles fonctionnalités pour les développeurs Unity

par Denis Kondratev11m2023/04/26
Read on Terminal Reader

Trop long; Pour lire

La version Rider 2023.1 introduit de nouvelles fonctionnalités pour les développeurs Unity, notamment le débogage de jeux Android via USB, des modèles de boîte à outils d'interface utilisateur pour créer des extensions personnalisées de l'éditeur Unity et la prise en charge de la pile technologique orientée données (DOTS) d'Unity. Ces mises à jour simplifient le processus de débogage, améliorent la création d'interface utilisateur et améliorent la prise en charge de Rider pour le développement Unity, ce qui en fait un choix de premier ordre en tant qu'IDE pour les développeurs Unity.
featured image - Version Rider 2023.1 : découverte de nouvelles fonctionnalités pour les développeurs Unity
Denis Kondratev HackerNoon profile picture
0-item
1-item
2-item

Pour moi, Rider de JetBrains est depuis longtemps reconnu comme le meilleur IDE pour le développement d'Unity. Dans la récente version de Rider 2023.1, de nombreuses nouvelles fonctionnalités ont été ajoutées pour faciliter la vie des développeurs. JetBrains n'a encore une fois pas déçu et continue de mettre la barre haute.


La nouvelle version permet de déboguer les jeux exécutés sur des appareils Android via un câble USB. En général, il simplifie le débogage en créant automatiquement des configurations d'exécution temporaires pour les joueurs connectés, en optimisant les sessions suivantes et en permettant une sauvegarde et un partage faciles avec votre équipe sur diverses plateformes. Pour certains, une fonctionnalité importante sera la prise en charge de la documentation localisée directement dans l'EDI.


Il est également temps d'approfondir et d'explorer la boîte à outils de l'interface utilisateur.


Rider a ajouté trois modèles d'extensions d'interface utilisateur pour l'éditeur Unity basés sur la boîte à outils de l'interface utilisateur.


Rider 2023.1 inclut des améliorations dans l'identification des champs avec l'attribut [SerializeReference], la recherche de l'utilisation de C# dans les animations Unity (ce qui a été cruellement manqué) et le formatage des attributs [Header].


En général, de nombreuses améliorations ont été ajoutées pour travailler avec C#. Et enfin, la partie la plus agréable : le support DOTS tant attendu de JetBrains.


Eh bien, examinons brièvement de quoi il s'agit et s'il vaut la peine de mettre à niveau Rider vers la dernière version. Si vous n'avez pas encore utilisé cet IDE, cet article vous sera également utile.

Déboguer des jeux Android via USB

Parfois, un jeu se comporte parfaitement bien dans l'éditeur Unity, mais les choses ne se passent pas aussi bien sur les appareils. Maintenant, Rider vous permet de déboguer le code directement sur l'appareil via USB. Eh bien, c'est inspirant.


N'oubliez pas que pour que cette fonctionnalité fonctionne, le build doit être compilé avec les options Development Build et Script Debugging activées.



Je voudrais vous rappeler que l'appareil lui-même doit également être configuré correctement. Tout d'abord, le mode développeur doit être activé sur l'appareil.


  1. Pour cela, rendez-vous dans le menu "Paramètres"
  2. Puis "À propos de l'appareil" ou "À propos du téléphone"
  3. Puis "Informations sur le logiciel"
  4. Trouvez l'élément "Numéro de build" et appuyez dessus plusieurs fois, au moins sept.
  5. Cela rendra l'appareil disponible pour le débogage et ouvrira le menu "Options pour les développeurs"



Un autre moyen simple de trouver l'élément "Numéro de build" consiste à le rechercher dans les paramètres.


Ensuite, ce que vous devez faire est d'activer le "débogage USB" dans les "Options de développement" qui apparaissent.



Il ne reste plus que quelques étapes. Lancez votre jeu sur l'appareil, et dans le menu principal de Rider, cliquez sur "Exécuter" puis sur "Attacher au processus Unity...". Dans la fenêtre ouverte, sélectionnez l'appareil Android avec votre application.



Tout est prêt! Définissez des points d'arrêt et déboguez votre jeu directement depuis l'appareil ! N'hésitez pas à tirer parti de ce puissant outil de débogage et à améliorer votre processus de développement de jeux.


Dès que vous démarrez le débogage pour la première fois, Rider crée automatiquement une configuration d'exécution temporaire pour le lecteur Android. Si vous souhaitez enregistrer la configuration d'exécution pour une utilisation future, vous pouvez le faire et la partager avec votre équipe.

Nouveaux modèles pour la boîte à outils de l'interface utilisateur

Bien sûr, nous sommes tous très habitués à l'IMGUI ancien, bon et en même temps terriblement inflexible. Cependant, l'équipe Unity travaille depuis longtemps sur un nouveau package UI Toolkit pour améliorer notre expérience de création d'interface utilisateur pour les jeux. À partir de Unity 2022.2, il est recommandé d'utiliser une nouvelle approche lors de la création de l'interface utilisateur dans l'éditeur.


UI Toolkit est un sujet approfondi distinct. Je dirai seulement que la nouvelle approche offre une approche plus pratique et, dans une certaine mesure, plus courante pour créer une interface utilisateur. Si vous avez de l'expérience avec HTML et CSS, il vous sera très facile de vous adapter. Mais je conseille également aux autres de ne pas tarder à maîtriser UI Toolkit.


Désormais, Rider, pour les projets Unity 2022.2 ou antérieurs, propose l'utilisation de nouveaux modèles par défaut. Essayons l'un d'entre eux. Pour cela, dans un premier temps, nous allons créer un simple ScriptableObject pour décrire les éléments du jeu.


 [CreateAssetMenu(fileName = "GameItem", menuName = "Game Item", order = 0)] public class GameItem : ScriptableObject { public string itemName; public int weight; public int price; }


Créons un éditeur personnalisé pour ce ScriptableObject. Pour cela, faites un clic droit sur le dossier Editor dans Rider, puis Add et sélectionnez Unity Script.






Dans la fenêtre ouverte, sélectionnez Éditeur personnalisé. Appelons notre éditeur GameItemEditor.


Dans l'attribut CustomEditor, indiquez que l'éditeur créé est destiné à la classe GameItem.





 using UnityEditor; using UnityEngine.UIElements; [CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public override VisualElement CreateInspectorGUI() { return base.CreateInspectorGUI(); } }


Ouvrez Fenêtre-> UI Toolkit-> UI Builder. Dans la fenêtre, enregistrez le document d'interface utilisateur actuel et nommez-le GameItem.uxml. Dans la fenêtre Bibliothèque, ajoutez trois champs qui correspondront à nos champs de classe GameItem et donnez-leur des noms appropriés.



Travailler avec UI Toolkit présente plusieurs avantages évidents. Il est possible d'éditer graphiquement des documents UXML disponibles directement via UI Builder, ainsi que par programmation, un peu similaire à IGMUI. Désormais, le style d'affichage de l'interface utilisateur peut être défini dans USS, essentiellement similaire à CSS, puis réutilisé dans le projet. Oh, comment cela manquait. Le support d'annulation automatique est également présent.


Un autre fait important est la liaison automatique des données. Indiquons les noms des champs de la classe GameItem dans les champs Binding Path.



N'oubliez pas d'enregistrer le document via le menu Fichier-> Enregistrer sous… dans la fenêtre Viewport. Les raccourcis clavier pour enregistrer Ctrl-S / Cmd-S ne vous aideront pas ici.


Vous devriez obtenir un document UXML avec à peu près le contenu suivant.


 <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False"> <ui:TextField picking-mode="Ignore" label="Name" name="Name" binding-path="itemName" /> <ui:IntegerField label="Weight" value="0" name="Weight" binding-path="weight" readonly="false" /> <ui:IntegerField label="Price" value="0" name="Price" binding-path="price" focusable="true" /> </ui:UXML>


Finissons maintenant d'écrire le GameItemEditor afin qu'il forme l'inspecteur directement à partir du document UXML.


 [CustomEditor(typeof(GameItem))] public class GameItemEditor : Editor { public VisualTreeAsset treeAsset; public override VisualElement CreateInspectorGUI() { var inspector = new VisualElement(); treeAsset.CloneTree(inspector); return inspector; } }


Sélectionnez le script GameItemEditor dans la fenêtre Projet et spécifiez le document d'interface utilisateur créé GameItem.uxml pour le champ Tree Asset, simplement en le faisant glisser.



Notre éditeur personnalisé pour la classe GameItem est prêt. Vous pouvez expérimenter un peu avec le document d'interface utilisateur et voir comment ses modifications affecteront l'affichage dans l'inspecteur.


Eh bien, la sortie du nouveau Rider 2023.1 est une bonne raison de se plonger dans l'étude de UI Toolkit et de profiter de tous les avantages de son utilisation.

Adopter la puissance du DOTS

La pile technologique orientée données de Unity, ou simplement DOTS, est un projet développé par l'équipe Unity depuis de nombreuses années. Après presque un an sans aucune mise à jour, les packages DOTS sont passés du statut expérimental à la pré-version, recevant la version 1.0.0. Au moment de la rédaction de cet article, il s'agit de la version 1.0.0-pre.65. Et il y a une promesse de sortie en 2023.


Malgré le long temps de développement et les doutes que certains avaient sur DOTS, qui avaient déjà renoncé à attendre la sortie, la nouvelle pile étonne toujours par ses capacités et ses performances.


La conception orientée données, ou d'une manière générale, le système de composants d'entité (ECS), offre une approche complètement différente de l'architecture de programmation de jeux. Contrairement aux modèles familiers de programmation orientée objet, l'accent est mis ici sur la séparation des données et leur traitement. Dans une telle architecture, des données similaires sont généralement situées à proximité les unes des autres en mémoire et permettent aux systèmes de les traiter à une vitesse incroyable, surtout si cela peut être fait en mode multithread.


Une énorme quantité de travail a été effectuée sur DOTS, avec des mécanismes de gestion de mémoire natifs ajoutés afin qu'ils puissent être utilisés facilement directement à partir de C#.


Avec la sortie de DOTS 1.0.0, de nombreuses approches du développement d'applications ont changé. À mon avis, ils sont devenus plus pratiques et intuitifs.


Bien qu'il y ait encore un manque de bonne documentation, il y en a assez pour commencer à plonger dans le monde incroyablement productif de DOTS et recâbler votre cerveau pour l'ECS et le traitement de données multithread.


J'ai précédemment publié un article sur la simulation de gravité à l'aide de Gravity Simulation With Unity DOTS 1.0 . Si vous le souhaitez, vous pouvez également trouver de nombreux autres supports pédagogiques pour étudier cette pile. Pour tester les nouvelles capacités de Rider, j'ai ouvert mon ancien projet Wave Propagation, qui a été écrit sur la version précédente de DOTS.



Ce qui m'a toujours ennuyé, ce sont les nombreux avertissements émis par Rider ou Visual Studio en raison des spécificités de l'écriture de code. Maintenant, le code semble propre et agréable.


Enfin! Comment j'ai attendu ça ! Rider prend officiellement en charge DOTS, ce qui en fait sans aucun doute l'IDE numéro un pour le développement Unity. Maintenant, Rider comprend vraiment ce qui est bien et ce qui ne l'est pas.


Par exemple, dans ce bout de code,


 public partial struct TransformingSystem : ISystem { [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }


Rider a suggéré que maintenant, pour un accès correct au singleton Field, OnCreate() doit définir l'attente via la méthode state.RequireForUpdate<Field>().


 public partial struct TransformingSystem : ISystem { public void OnCreate(ref SystemState state) { state.RequireForUpdate<Field>(); } [BurstCompile] public void OnUpdate(ref SystemState state) { var field = SystemAPI.GetSingleton<Field>(); var job = new TransformingJon { HeightScale = field.CellHeightScale, DeltaTime = SystemAPI.Time.fixedDeltaTime, FieldViscosity = field.Viscosity, MinHeight = field.MinHeight }; job.ScheduleParallel(); } }


Des templates de création de bakers pour MonoBehaviors sont apparus, et il vous sera proposé de créer un nouveau composant ou d'ajouter des champs à un existant.



Bien sûr, tout n'est pas encore parfait. Lors de la génération du code Baker, un modèle obsolète est utilisé. J'ai ce code.


 public class FieldAuthoring : MonoBehaviour { public GameObject CellPrefab; public Field Field; public Impulse Impulse; public class FieldAuthoringBaker : Baker<FieldAuthoring> { public override void Bake(FieldAuthoring authoring) { AddComponent(new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab), Field = authoring.Field, Impulse = authoring.Impulse }); } } } public struct FieldComponentData : IComponentData { public Entity CellPrefab; public Field Field; public Impulse Impulse; }


Ici, les méthodes déjà obsolètes GetEntity() et AddComponent() sont utilisées. Au lieu de cela, l'ajout de composants doit maintenant être effectué de cette manière.


 public override void Bake(FieldAuthoring authoring) { var entity = GetEntity(TransformUsageFlags.Dynamic); AddComponent(entity, new FieldComponentData { CellPrefab = GetEntity(authoring.CellPrefab, TransformUsageFlags.Dynamic), Field = authoring.Field, Impulse = authoring.Impulse }); }


Bien entendu, vous pouvez modifier vous-même les modèles. Mais je pense que le correctif de JetBrains ne tardera pas à arriver. Il y a aussi la possibilité de créer un MonoBehavior autorisant avec un baker pour le composant. Dans leur blog, vous pouvez déjà trouver un article , qui décrit en détail les nouvelles fonctionnalités lorsque vous travaillez avec DOTS, donc je ne vois aucun intérêt à décrire la même chose ici.

Conclusion

La version Rider 2023.1 apporte une multitude de nouvelles fonctionnalités et améliorations pour les développeurs Unity, renforçant ainsi sa position de meilleur IDE pour le développement Unity. Avec un débogage amélioré pour les appareils Android, de nouveaux modèles pour UI Toolkit, une prise en charge DOTS tant attendue et des fonctionnalités supplémentaires telles qu'un accès rapide à la documentation en ligne pour les packages de registre Unity et la documentation API localisée, JetBrains continue d'élever la barre pour les outils de développement de jeux. Ces fonctionnalités simplifient non seulement le processus de développement, mais permettent également aux développeurs de créer des jeux meilleurs et plus efficaces.


De plus, Rider 2023.1 fournit plusieurs autres mises à jour, telles qu'une détection plus précise des champs sérialisés dans le code, une meilleure prise en charge de la recherche d'utilisations C# dans les animations Unity et la mise à jour très demandée du moteur de formatage pour placer les attributs [Header] sur une ligne distincte. Ces améliorations contribuent à une expérience de développement plus simple et plus efficace.


Que vous soyez un développeur Unity expérimenté ou débutant, la version Rider 2023.1 vaut la peine d'être explorée. Les nouvelles fonctionnalités répondent à un large éventail de besoins et aident à rationaliser le processus de développement. Si vous n'avez jamais utilisé Rider auparavant, cette version offre une excellente occasion de découvrir ses puissantes fonctionnalités de première main. Pour ceux qui utilisent déjà Rider, la mise à niveau vers la dernière version améliorera sans aucun doute votre workflow de développement de jeux.


Adoptez les dernières avancées du développement Unity avec Rider 2023.1 et portez vos projets de jeu vers de nouveaux sommets. Ne manquez pas l'occasion d'améliorer votre expérience de développement et de créer des jeux plus attrayants et plus performants.