Pourquoi mon code C # 6 ne se compile-t-il pas dans Unity?


9

Pourquoi Unity ne peut-il pas fonctionner avec du code C # 6 ? Cela me donne toujours des erreurs de compilation. Voici quelques exemples de code:

using static System.Convert;
using static System.Environment;

$"€{punten}{NewLine}€{Money}{NewLine}€{KilledEnemies}{NewLine}€{bonus}{NewLine}€{total}";

J'utilise Visual Studio comme éditeur de code et je construis sans erreur. Si j'appuie sur play dans Unity, cela ne se fera pas.


Rechercher unity .net profile upgradesur Google
2017

Réponses:


18

Unity utilise une ancienne version du runtime Mono basé sur .NET3.5. Il utilise quelque chose entre C # 3 et 4 en termes de fonctionnalités.

J'ai trouvé cela en cherchant sur Google. Je ne sais pas si cela fonctionne, mais cela pourrait valoir la peine d'être étudié.


Il convient de noter qu'il est prévu de mettre à niveau vers un profil .NET plus récent dans le futur ( unit3d.com/unity/roadmap ). Cependant, étant donné les conditions préalables énoncées dans la feuille de route, nous verrons que cela ne se produira qu'à la fin de 2016 au plus tôt, très probablement pas avant
courant

7
Le lien dans cette réponse a pourri et renvoie maintenant un 404 :(
ashes999

7
C'est la raison pour laquelle les gens ne devraient pas publier de liens sur stackexchange sans fournir un synopsis.
Philipp

Selon ( forum.unity3d.com/threads/… ), cet outil n'est plus développé / pris en charge. Une alternative est ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), que j'utilise personnellement, bien qu'elle présente des défauts (comme Visual Studio en oubliant), ou regardez la réponse @BenAdams , ci-dessous, pour de meilleures nouvelles.
Khale_Kitha


4

Cette vidéo sur YouTube montre comment quelqu'un a réussi à faire fonctionner la syntaxe C # 6 sur Unity en créant un nouveau projet, en redéfinissant le .Net Framework cible sur 3.5, en définissant les répertoires de sortie de génération et de publication dans le dossier d'actifs du projet Unity et en ajoutant un référence à la DLL UnityEngine. Le débogage semble fonctionner de la même manière.


2

Le compilateur dans Visual Studio a plus de fonctionnalités que le compilateur dans Unity, ce qui signifie que du code (en particulier les fonctionnalités c # plus récentes) donnera une erreur dans Unity, mais pas dans Visual Studio.

Vous pouvez cependant modifier votre framework cible pour qu'il corresponde à celui qui se rapproche le plus de ce que Unity utilise dans votre éditeur. J'ai fait cela dans Xamarin lors du développement de bibliothèques pour Unity, mais il semble que cela soit également possible dans Visual Studio.

Dans Visual Studio, dans les propriétés du projet DLL, définissez la propriété Framework cible sur la version du framework Unity que vous utilisez. Il s'agit de la bibliothèque de classes de base Unity qui correspond à la compatibilité API que votre projet cible, comme les bibliothèques de classes de base complètes, micro ou Web de Unity. Cela empêche votre DLL d'appeler des méthodes de framework qui existent dans d'autres frameworks ou niveaux de compatibilité, mais qui peuvent ne pas exister dans la version du framework Unity que vous utilisez.

https://msdn.microsoft.com/en-us/library/dn940020.aspx


Vous voudrez peut-être souligner que l'utilisation d'un framework cible différent peut provoquer des problèmes lors de la construction pour d'autres plates-formes que Windows.
Philipp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.