Différence entre le backend de script d'unité IL2CPP et Mono2x

14

IL2CPP est un back-end de script développé par Unity que vous pouvez utiliser comme alternative à Mono lors de la création de projets pour certaines plates-formes. Remarque - IL2CPP n'est disponible que lors de la construction pour les plates-formes suivantes:

  • Android AppleTV, iOS *, Nintendo 3DS, Nintendo Switch, Playstation 4 Playstation Vita, WebGL *, Windows Store, Xbox One

J'ai un projet (Unity 5.2) qui est passé au déploiement Android. J'ai essayé de basculer mes scripts Mono2xvers IL2CPPet ça me montre que

IL2CPP sur Andriod est expérimental et non pris en charge

Donc, ma simple question est que si elle n'est toujours pas prise en charge, alors pourquoi l'option a-t-elle été incluse, quelle est la différence fondamentale entre IL2CPP et Mono2x. Pourquoi je suis passé au backend de script IL2CPP ? quels sont ses avantages et ses inconvénients ?

J'ai également vérifié dans l'unité 5.5.2 qu'il n'y a pas d'option IL2CPP dans le déploiement de la plate-forme Windows.

Muhammad Faizan Khan
la source

Réponses:

13

Les informations sont basées sur la version Unity 2018.2:

Citant le manuel Unity sur IL2CPP :

IL2CPP ( Intermediate Language To C ++ ) est un backend de script développé par Unity que vous pouvez utiliser comme alternative à Mono lors de la création de projets pour diverses plates-formes. IL2CPP ( un compilateur à l' avance (AOT)) prend en charge le débogage du code managé de la même manière que le backend de script Mono.

Lors de la création d'un projet à l'aide d'IL2CPP, Unity convertit le code IL des scripts et des assemblys en C ++, avant de créer un fichier binaire natif (.exe, apk, .xap, par exemple) pour la plateforme choisie. Certaines des utilisations de IL2CPP incluent l'augmentation des performances, de la sécurité et de la compatibilité de la plateforme de vos projets Unity.

Citant le tutoriel Unity sur IL2CPP et Mono :

Chaque backend de script présente des avantages et des inconvénients qui devraient influencer votre décision quant au choix qui convient à votre situation:

IL2CPP:

  • La génération de code est fortement améliorée par rapport à Mono.
  • Le débogage du code Script en C ++ de haut en bas est possible.
  • Vous pouvez activer la suppression du code moteur pour réduire la taille du code.
  • Les temps de construction sont plus longs qu'avec Mono.
  • Prend uniquement en charge la compilation Ahead of Time (AOT).

Mono:

  • Temps de construction plus rapides que IL2CPP.
  • Prend en charge plus de bibliothèques gérées en raison de la compilation Just In Time (JIT).
  • Prend en charge l'exécution de code d'exécution.
  • Doit expédier les assemblys gérés (fichiers .dll produits en mono ou .net).

Les points importants:

  • L'architecture cible par défaut dans les paramètres du lecteur Android est armv7 et x86 avec l'IL2CPP et le backend de script mono.
  • Mono n'est pas pris en charge sur UWP ou iOS 11 et supérieur. L'architecture par défaut dans les paramètres du lecteur iOS est armv7 et arm64 avec le backend de script IL2CPP.

  • La construction UWP prend uniquement en charge IL2CPP et .NET. Le backend de script .NET (obsolète) utilise le .NET de Microsoft pour alimenter les scripts.

Sanket Prabhu
la source
1
Je pense que votre réponse manque de références. Je vois que la liste IL2CPP / Mono est le même texte que la page du didacticiel IL2CPP & Mono d'Unity , et les 2 premiers paragraphes ont le même texte que la page de manuel IL2CPP d'Unity dans un ordre différent. Veuillez modifier votre réponse pour inclure des références, consultez le centre d'aide pour plus d'informations.
sonny
3

IL2CPP est un back-end de script développé par Unity que vous pouvez utiliser comme alternative à Mono lors de la création de projets pour certaines plates-formes. Lorsque vous choisissez de créer un projet à l'aide d'IL2CPP, Unity convertit le code IL (parfois appelé CIL - Intermediate Language ou Common Intermediate Language) à partir de scripts et d'assemblages en code C ++, avant de créer un fichier binaire natif (.exe, apk, .xap, for exemple) pour la plateforme choisie. Certaines des utilisations de IL2CPP incluent l'augmentation des performances, de la sécurité et de la compatibilité de la plateforme de vos projets Unity.

La source

IL2CPP est une plate-forme d'exécution supposée équivalente * plus rapide que mono. Dans ce contexte, «expérimental» met fortement l'accent sur le mot «soi-disant» dans la phrase précédente.

Les fonctionnalités expérimentales sont publiées pour la même raison que le logiciel bêta est rendu public: le logiciel est assez bon à utiliser, et les développeurs veulent des rapports de bogues et d'autres commentaires d'un large éventail d'utilisateurs afin qu'ils puissent arriver au point où le logiciel est prêt ou la version réelle.


* IL2CPP ne fonctionne pas pour le code utilisé uniquement par réflexion, ce qui se produira lors de l'utilisation de la réflexion, de la sérialisation ou des génériques sur des classes qui ne sont jamais appelées directement et donc supprimées de la génération. La même restriction s'applique actuellement à Mono sur les plates-formes qui utilisent des restrictions de compilation Ahead of Time.

Peter
la source
Il n'est donc pas encore mature, mais j'utilise 5.2 aucune expérience sur 5.5. ou 5.6. De plus, quels sont les avantages et les inconvénients de passer à il2cpp?
Muhammad Faizan Khan
Il est mature pour certaines plateformes. Il existe depuis avant Unity 5 pour au moins IOS. Je pense que même l'IL2CPP Android n'est pas marqué expérimental dans les dernières versions. J'ai trouvé que le passage de Unity 4 à 5 était plus lent sur Android jusqu'à ce que je commence à utiliser l'IL2CPP. C'est nettement plus rapide sur mes appareils de test.
Tartle Wizard
1
Comme IL2CPP se compile en code machine Ahead-of-Time, il a quelques restrictions supplémentaires concernant la réflexion et l'utilisation des génériques . Le compilateur Just-in-Time de Mono a les informations disponibles pour introspecter et générer le code nécessaire à la volée, mais pour AoT, tout le code nécessaire doit être facile à détecter au moment de la construction.
DMGregory