📋

Points Clés

  • Mono utilise l'ancien standard C# 4.0, tandis que .NET supporte les versions modernes de C#.
  • Le ramasse-miettes de .NET réduit les chutes d'images par rapport à l'approche stop-the-world de Mono.
  • Le DOTS (Data-Oriented Technology Stack) d'Unity nécessite .NET pour une fonctionnalité complète.
  • La migration implique la mise à jour des API, la recompilation des scripts et le test des plugins tiers.

Résumé Rapide

Unity transitionne actuellement son backend de scriptage de l'environnement d'exécution hérité Mono vers les technologies modernes .NET. L'article original compare ces frameworks, soulignant que Mono utilise l'ancien standard C# 4.0 tandis que .NET supporte des versions plus récentes offrant de meilleures performances.

Les différences clés incluent les améliorations de la gestion de la mémoire, les vitesses de compilation JIT et le support des bibliothèques. La migration n'est pas transparente ; les développeurs font face à des défis liés à la compatibilité des API et au refactoring de code. Le nouveau DOTS (Data-Oriented Technology Stack) d'Unity repose fortement sur les capacités de .NET.

Bien que Mono reste fonctionnel pour les projets hérités, .NET offre des gains de performance significatifs et prépare le développement Unity pour l'avenir. Ce guide couvre les nuances techniques, les stratégies de migration et les considérations pratiques pour les développeurs.

Comprendre les Fondations Techniques

La différence fondamentale entre Mono et .NET dans Unity réside dans leurs environnements d'exécution et leur support linguistique. Mono a été le backend de scriptage par défaut d'Unity pendant plus d'une décennie, fournissant une compatibilité multiplateforme mais limitée à la syntaxe C# 4.0.

.NET, spécifiquement l'implémentation d'Unity de .NET 4.x et .NET Standard 2.1, débloque les fonctionnalités modernes de C#. Cela inclut :

  • Les modèles Async/await pour une meilleure concurrence
  • Une gestion de la mémoire améliorée avec des modes à faible latence
  • Une compilation JIT (Just-In-Time) améliorée
  • L'accès aux nouvelles API BCL (Base Class Library)

L'article note que Mono utilise un ramasse-miettes stop-the-world, qui peut causer des chutes d'images pendant la collecte. En revanche, le ramasse-miettes de .NET est plus efficace, réduisant les à-coups de performance dans les scènes complexes.

Implications sur les Performances 🚀

La performance est le principal moteur de la migration d'Unity vers .NET. Les benchmarks montrent que le compilateur JIT de .NET produit un code machine plus optimisé que les alternatives legacy JIT ou IL2CPP de Mono.

Les métriques de performance clés incluent :

  1. Temps de démarrage : .NET réduit les temps de démarrage des applications de 20 à 30 % dans certains cas.
  2. Utilisation de la mémoire : Le ramasse-miettes générationnel de .NET gère mieux les grands tas d'objets.
  3. Threading : .NET supporte le vrai multithreading, critique pour DOTS et ECS (Entity Component System).

Cependant, la transition n'est pas automatique. Les développeurs doivent recompiler les scripts et potentiellement refactoriser le code pour éviter l'obsolescence des API. L'article souligne que si .NET offre une vitesse brute, il nécessite des tests minutieux pour assurer la compatibilité descendante avec les actifs existants.

Défis et Stratégies de Migration 🛠️

Migrer de Mono à .NET n'est pas un processus en un clic. L'article décrit plusieurs obstacles :

  • Différences d'API : Certaines méthodes UnityEngine.Object se comportent différemment sous .NET.
  • Plugins tiers : Les anciens plugins construits pour Mono peuvent échouer au chargement.
  • Gaps de version C# : Le code utilisant des fonctionnalités dynamic ou tuple nécessite des mises à jour.

Pour atténuer les problèmes, Unity recommande une approche par phases :

  1. Activer .NET 4.x dans les Paramètres du lecteur.
  2. Tester les boucles de jeu critiques pour les régressions.
  3. Mettre à jour les packages tiers via le Package Manager.
  4. Profiler l'utilisation de la mémoire pour détecter les pics de pression GC.

Pour les grands projets, l'article suggère de maintenir un workflow hybride, où seuls les systèmes critiques pour la performance utilisent .NET tandis que le code hérité reste temporairement sur Mono.

L'Avenir : DOTS et Au-delà ✨

Le Data-Oriented Technology Stack (DOTS) d'Unity est l'objectif final de cette migration. DOTS repose sur le burst compiler et le job system de .NET pour offrir un parallélisme massif. Sans .NET, DOTS ne peut pas fonctionner efficacement.

L'article avertit que s'en tenir à Mono signifie passer à côté de :

  • Les packages Unity Physics et Entities.
  • Les systèmes de jeu multithreadés à haute performance.
  • Les futures mises à jour des pipelines de rendu d'Unity.

En fin de compte, le choix est clair : .NET est l'avenir. Tandis que Mono reste pour le support hérité, les nouveaux projets devraient viser .NET dès le premier jour. Les développeurs sont encouragés à auditer leurs bases de code maintenant et à planifier les migrations avant que Mono ne devienne déprécié.