web-dev-qa-db-fra.com

Unity3D, pourquoi la «version d'exécution de script» est .NET3.5 mais le «niveau de compatibilité API» est .NET2.0? Que signifient réellement les deux options de PlayerSettings?

J'utilise Unity3D ces jours-ci et j'ai vérifié les manuels sur le système .NET. Mais je me sentais très confus.

Dans les paramètres du lecteur Unity3D, il existe deux options appelées "version d'exécution de script" et "niveau de compatibilité api".

Lorsque je règle "version d'exécution de script" sur "équivalent .NET 3.5", je peux choisir "niveau de compatibilité API" entre ".NET 2.0" et "sous-ensemble .NET 2.0". Mais pourquoi ces deux valeurs d'option sont différentes? Ne devraient-ils pas faire référence à la même valeur de version .NET? Que signifie le mot ".NET" dans les deux options différentes? Quelle version .NET utilise réellement Unity3D?

Et, lorsque je définis "Version d'exécution de script" sur "Équivalent .NET 4.6", je peux choisir "Niveau de compatibilité API" comme ".NET4.6". Mais pourquoi ces deux valeurs d'option sont les mêmes en ce moment?

De l'autre côté, j'ai trouvé des manuels sur les sites Web de Microsoft présentant le système .NET, et ils disent qu'il existe .NET Standard, .NET Framework, .NET Core et Mono. Il n'y a pas du tout d'entité ".NET" autonome.

Alors, que signifie réellement la version .NET dans "Version d'exécution de script" et "Niveau de compatibilité API" des Paramètres Unity Player?

Mettre à jour

Les faits:

  1. Il n'y a pas d'option "scripting runtime version" avant nity2017.1.

  2. .NET Framework a un bon retour en arrière compatibilité , ce qui signifie que les composants .NET 2.0 peuvent s'exécuter sur .NET 3.5 sans interruption.

  3. Lorsque nous parlons de la version .NET, elle fait toujours référence à la version de .NET Framework.

  4. Unity3D met à jour le runtime vers .NET 4.6.

Déduire:

  1. .NET Framework a une bonne compatibilité descendante, tout comme le mono.

  2. Unity3D utilise un mono comme runtime, ce qui équivaut à .NET 3.5

  3. Unity3D utilise uniquement les fonctionnalités .NET 2.0 pour compiler, mais dispose d'un runtime .NET 3.5 pour s'exécuter. C'est pourquoi "niveau de compatibilité API" est ".NET 2.0" lorsque "version d'exécution de script" est ".NET 3.5"

  4. Unity3D se met à jour pour utiliser les fonctionnalités .NET 4.6 sur le runtime .NET 4.6. C'est pourquoi "niveau de compatibilité API" est ".NET 4.6" lorsque "version d'exécution de script" est ".NET 4.6"

Mis à jour à nouveau

Voici une autre question pertinente: Pourquoi Unity utilise-t-il .NET 2.0 lorsque Mono prend en charge .NET 3.5?

Et un fil pertinent: https://forum.unity.com/threads/to-linq-or-not-to-linq.223887/

8
unolee

Que signifient réellement la version .NET dans "Version d'exécution de script" et "Niveau de compatibilité API" des Paramètres Unity Player?

Niveau de compatibilité API :

Juste une option qui vous est donnée pour spécifier comment le compilateur doit compiler le projet. Ils sont la même version .Net. Voir ci-dessous ce que vous obtenez pour chaque option.

Sous-ensemble .NET 2.0

  • Réduit la taille de l'application
  • Augmente le temps de démarrage
  • Certaines API sont supprimées par défaut afin d'accomplir les choses mentionnées ci-dessus. Cela inclut principalement le socket .NET ou l'API réseau.

.NET 2.0 est le contraire.

  • A une taille de construction plus grande
  • Le temps de démarrage est un peu plus long
  • Comprend éventuellement toutes les API .NET standard qui ne sont pas basées sur la plate-forme dans la build

Version d'exécution du script :

C'est là que vous avez choisi la version .NET que vous souhaitez utiliser. La modification de cela vous permettra d'utiliser la sélection de l'API .NET et de la version d'exécution.

Ainsi, la sélection de .NET 4.6 vous permet d'utiliser l'API .Net 4.6 pour coder votre code et Unity inclura le runtime .NET 4.6 dans votre jeu. La même chose s'applique au .NET 3.5.

Vous vous demandez pourquoi ils ont tous "Equivalent" comme post-correction? En effet, certaines des API et fonctionnalités sont supprimées ou supprimées dans l'Unity. Vous le remarquerez, mais cela ne s'applique qu'à quelques quantités d'API .NET. La plupart d'entre eux sont pris en charge.

Et, lorsque je définis "Version d'exécution de script" sur "Équivalent .NET 4.6", je peux choisir "Niveau de compatibilité API" comme ".NET4.6". Mais pourquoi ces deux valeurs d'option sont les mêmes en ce moment ???

Nan. Ce n'est pas vrai. Vous ne voyez que les deux options dans l'option "Scripting Runtime Version" mais vous ne pouvez pas sélectionner ".NET 3.5" if "Niveau de compatibilité API" est défini sur ". NET 4.6".

Si vous essayez cela, Unity doit redémarrer puis sélectionnez ". NET 3.5" pour "Scripting Runtime Version" et changez automatiquement "Niveau de compatibilité API " de ". NET 4.6 " à ". NET 3.5 ".

Donc, si ". NET 4.6" as "Niveau de compatibilité API", vous devez sélectionnez également ". NET 4.6" comme "Scripting Runtime Version".

Quelle version .NET utilise réellement Unity3D?

Celui que vous avez sélectionné dans le menu "Scripting Runtime Version".

Je me demande pourquoi je n'ai qu'à sélectionner ".NET 2.0" ou ".NET 2.0 Subset" pour "niveau de compatibilité api" lors du paramétrage de "version d'exécution de script" sur ".NET 3.5". Lorsque "version d'exécution de script" est égal à ".NET 3.5", je pense que "niveau de compatibilité API" devrait être ".NET 3.5" ou ".NET 3.5 Subset". C'est bizarre ici dans Unity. Qu'est-ce qui a mal tourné ici?

Licence.

Il y avait un problème de licence. La seule façon pour la société d'Unity de mettre à jour le run-time était de payer une grande somme d'argent à Xamarin depuis que Xamirin a fait que le mono-run-time Unity utilise et est sous la LGPL. Ils ne voulaient pas faire ça. J'ai remarqué qu'ils ont pu mettre à jour le mono run-time après le partenariat avec Microsoft et rejoint la .NET Foundation l'année dernière.

9
Programmer