Почему мой код C # 6 не компилируется в Unity?

9

Почему Unity не может работать с кодом C # 6 ? Это всегда дает мне ошибки компилятора. Вот несколько примеров кода:

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

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

Я использую Visual Studio в качестве редактора кода и собираю без ошибок. Если я нажму play в Unity, он не будет построен.

H. Pauwelyn
источник
Поиск unity .net profile upgradeв Google
Matth

Ответы:

18

Unity использует старую версию Mono runtime, основанную на .NET3.5. Он использует что-то между C # 3 и 4 с точки зрения возможностей.

Я нашел это , погуглив вокруг. Не уверен, что это работает, но, возможно, стоит что-то исследовать.


источник
Стоит отметить, что в будущем планируется обновление до более нового профиля .NET ( unity3d.com/unity/roadmap ). Однако, учитывая предпосылки, указанные в дорожной карте, мы увидим, что это произойдет только в конце 2016 года, скорее всего, не раньше, чем в 2017 году.
evilcandybag
7
Ссылка в этом ответе сгнила и теперь возвращает 404 :(
ashes999
7
Это причина, почему люди не должны публиковать ссылки на stackexchange без предоставления краткого обзора.
Филипп,
По ( forum.unity3d.com/threads/… ) этот инструмент больше не разрабатывается / не поддерживается. Альтернативой является ( bitbucket.org/alexzzzz/unity-c-5.0-and-6.0-integration/src ), которую я лично использую, хотя она имеет недостатки (например, Visual Studio об этом забывает), или посмотрите ответ @BenAdams ниже, для лучших новостей.
Khale_Kitha
4

Это видео на YouTube демонстрирует, как кто-то смог заставить синтаксис C # 6 работать с Unity, создав новый проект, изменив целевой .Net Framework обратно на 3.5, установив выходные каталоги для сборки и выпуска в папку ресурсов проекта Unity и добавив ссылка на UnityEngine dll. Отладка, кажется, функционирует так же.

cjsimon
источник
2

Компилятор в Visual Studio имеет больше возможностей, чем компилятор в Unity, что означает, что некоторый код (особенно новые функции c #) выдаст ошибку в Unity, но не в Visual Studio.

Однако вы можете изменить свою целевую среду, чтобы она соответствовала той, которая ближе всего к тому, что Unity использует в вашем редакторе. Я делал это в Xamarin при разработке библиотек для Unity, но, похоже, это возможно и в Visual Studio.

В Visual Studio в свойствах проекта DLL установите свойство платформы Target для используемой версии платформы Unity. Это библиотека базовых классов Unity, которая соответствует API-совместимости, на которую нацелен ваш проект, такой как библиотеки базовых классов Unity, Micro или Web. Это препятствует тому, чтобы ваша DLL вызывала методы платформы, которые существуют в других платформах или уровнях совместимости, но которые могут не существовать в используемой версии платформы Unity.

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

Маттиас
источник
Возможно, вы захотите указать, что использование другой целевой структуры может вызвать проблемы при сборке для других платформ, отличных от Windows.
Филипп