Dlaczego mój kod C # 6 nie kompiluje się w Unity?

9

Dlaczego Unity nie może współpracować z kodem C # 6 ? Zawsze daje mi to błędy kompilatora. Oto kilka przykładów kodu:

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

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

Używam Visual Studio jako edytora kodu i buduję bez błędów. Jeśli naciśniesz przycisk Graj w Unity, nie zbuduje się.

H. Pauwelyn
źródło
Szukaj unity .net profile upgradew Google
mat

Odpowiedzi:

18

Unity używa starej wersji środowiska wykonawczego Mono opartego na .NET3.5. Wykorzystuje coś między C # 3 a 4 pod względem funkcji.

Znalazłem to , szukając w Google. Nie jestem pewien, czy to działa, ale może być czymś wartym zbadania.


źródło
Warto zauważyć, że są plany uaktualnienia do nowszego profilu .NET w przyszłości ( unity3d.com/unity/roadmap ). Jednak biorąc pod uwagę warunki określone w mapie drogowej, zobaczymy, że stanie się to dopiero pod koniec 2016 r., Najwcześniej, najprawdopodobniej dopiero w 2017 r.
evilcandybag
7
Link w tej odpowiedzi zgnił i teraz zwraca 404 :(
ashes999
7
To jest powód, dla którego ludzie nie powinni publikować linków na stackexchange bez przedstawienia streszczenia.
Philipp
Na ( forum.unity3d.com/threads/… ) to narzędzie nie jest już rozwijane / obsługiwane. Alternatywą jest ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), z którego osobiście korzystam, chociaż ma wady (jak Visual Studio zapominając o tym), lub spójrz na odpowiedź @BenAdams poniżej, aby uzyskać lepsze wiadomości.
Khale_Kitha
4

Ten film na YouTube pokazuje, jak ktoś był w stanie uzyskać składnię C # 6 działającą na Unity, tworząc nowy projekt, zmieniając docelowy .Net Framework z powrotem na 3.5, ustawiając katalogi wyjściowe kompilacji i wydania w folderze zasobów projektu Unity i dodając odwołanie do dll UnityEngine. Debugowanie wydaje się działać tak samo.

cjsimon
źródło
2

Kompilator w Visual Studio ma więcej funkcji niż kompilator w Unity, co oznacza, że ​​niektóre kody (zwłaszcza nowsze funkcje c #) powodują błąd w Unity, ale nie w Visual Studio.

Możesz jednak zmienić docelową strukturę, aby pasowała do tej, która jest najbliższa temu, co Unity używa w twoim edytorze. Zrobiłem to w Xamarin podczas tworzenia bibliotek dla Unity, ale wygląda na to, że jest to również możliwe w Visual Studio.

W programie Visual Studio we właściwościach biblioteki DLL ustaw właściwość Struktura docelowa na używaną wersję struktury Unity. Jest to biblioteka klas podstawowych Unity, która jest zgodna ze zgodnością interfejsu API, na którą skierowany jest Twój projekt, na przykład biblioteki pełne, mikro lub biblioteki klas podstawowych Unity. Zapobiega to wywoływaniu przez bibliotekę metod frameworku, które istnieją w innych frameworkach lub poziomach zgodności, ale które mogą nie istnieć w używanej wersji frameworku Unity.

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

Mattias
źródło
Możesz wskazać, że użycie innej docelowej struktury może powodować problemy podczas budowania dla platform innych niż Windows.
Philipp