Warum wird mein C # 6-Code nicht in Unity kompiliert?

9

Warum kann Unity nicht mit C # 6- Code arbeiten? Es gibt mir immer Compilerfehler. Hier sind einige Codebeispiele:

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

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

Ich verwende Visual Studio als Code-Editor und erstelle fehlerfrei. Wenn ich in Unity auf Play drücke, wird es nicht erstellt.

H. Pauwelyn
quelle
Suchen Sie nach unity .net profile upgradeauf Google
matth

Antworten:

18

Unity verwendet eine alte Version der Mono-Laufzeit, die auf .NET3.5 basiert. Es verwendet etwas zwischen C # 3 und 4 in Bezug auf Funktionen.

Ich fand das, indem ich herum googelte. Ich bin mir nicht sicher, ob es funktioniert, aber es könnte sich lohnen, es zu untersuchen.


quelle
Es ist erwähnenswert, dass es in Zukunft Pläne für ein Upgrade auf ein neueres .NET-Profil gibt ( entity3d.com/unity/roadmap ). Angesichts der in der Roadmap angegebenen Voraussetzungen werden wir jedoch feststellen, dass dies frühestens Ende 2016 geschieht, höchstwahrscheinlich erst irgendwann im Jahr 2017.
evilcandybag
7
Der Link in dieser Antwort ist verrottet und gibt jetzt ein 404 :(
ashes999
7
Dies ist der Grund, warum Benutzer keine Links auf Stackexchange veröffentlichen sollten, ohne eine Zusammenfassung bereitzustellen.
Philipp
Per ( forum.unity3d.com/threads/… ) wird dieses Tool nicht mehr entwickelt / unterstützt. Eine Alternative ist ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), die ich persönlich verwende, obwohl sie Fehler aufweist (wie das Vergessen von Visual Studio), oder die Antwort von @BenAdams unten für bessere Nachrichten.
Khale_Kitha
4

Dieses Video auf YouTube zeigt, wie jemand die C # 6-Syntax in Unity zum Laufen bringen konnte, indem er ein neues Projekt erstellte, das Ziel-.Net Framework auf 3.5 zurücksetzte, die Ausgabeverzeichnisse zum Erstellen und Freigeben in den Unity-Projektassetsordner legte und a hinzufügte Verweis auf die UnityEngine-DLL. Das Debuggen scheint genauso zu funktionieren.

cjsimon
quelle
2

Der Compiler in Visual Studio verfügt über mehr Funktionen als der Compiler in Unity. Dies bedeutet, dass einige Codes (insbesondere neuere c # -Funktionen) in Unity einen Fehler verursachen, in Visual Studio jedoch nicht.

Sie können Ihr Zielframework jedoch so ändern, dass es dem entspricht, das Unity in Ihrem Editor am nächsten kommt. Ich habe dies in Xamarin getan, als ich Bibliotheken für Unity entwickelt habe, aber es sieht so aus, als ob es auch in Visual Studio möglich ist.

Legen Sie in Visual Studio in den Eigenschaften des DLL-Projekts die Target-Framework-Eigenschaft auf die von Ihnen verwendete Unity-Framework-Version fest. Dies ist die Unity-Basisklassenbibliothek, die der API-Kompatibilität entspricht, auf die Ihr Projekt abzielt, z. B. die Unity-Voll-, Mikro- oder Webbasisklassenbibliotheken. Dadurch wird verhindert, dass Ihre DLL Framework-Methoden aufruft, die in anderen Frameworks oder Kompatibilitätsstufen vorhanden sind, in der von Ihnen verwendeten Unity-Framework-Version jedoch möglicherweise nicht vorhanden sind.

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

Mattias
quelle
Möglicherweise möchten Sie darauf hinweisen, dass die Verwendung eines anderen Zielframeworks beim Erstellen für andere Plattformen als Windows zu Problemen führen kann.
Philipp