2016-07-04 1 views
1

Мне недавно приходилось работать в Unity, что требовало, чтобы классы были доступны только в более поздних версиях .NET, которые Unity еще не поддерживает. Мне удалось загрузить очень мало скриптов, которые мне не хватало, и добавил их в мой проект, и, похоже, он работает нормально. Я хотел бы знать, почему я могу не просто взять весь источник .NET и засунуть его в свои проекты? Каковы последствия такого поведения?Ручное добавление сценариев .NET 4.5 к Unity: потенциальные проблемы?

EDIT: Сценарии, которые я добавил до сих пор, были общей версией WeakReference, а также любыми зависимостями, которые ему нужны (контракт в System.Diagnostics.Contract).

EDIT EDIT: Я в основном хочу знать, почему я не могу просто просто файлы классов C#, найденные в более поздних версиях .NET для Unity, который использует старую версию .NET. Это проблема с программным обеспечением? Это аппаратная проблема? Это потому, что системные компоненты Unity были построены в соответствии с более ранней версией .NET?

+0

Какие особенности .NET 4.5 вы используете в своих сценариях? Вы не предоставили нам много деталей в этом отношении, поэтому выявление потенциальных проблем невозможно без чрезмерной широты. – Serlite

+1

Unity использует очень старую сборку Mono, поэтому она очень не поддерживает профиль .NET 4.5. Вы можете безопасно использовать совместимые с .NET 4 вещи. –

ответ

4

SHORT ОТВЕТ:

Установите Visual Studio Tools for Unity (он должен автоматически установлен при установке Unity), когда вы делаете вы можете сказать своему .csproj в «целевой рамочным» в раскрывающемся списке целевой специальный версии .NET Unity, и вы сможете только компилировать dll, у которых есть методы и типы, поддерживаемые Unity.


LONG ОТВЕТ:

Это происходит потому, что Unity не использует установленную версию .NET на компьютере. Unity использует Mono и очень старую версию. Это позволяет использовать единое целое на нескольких платформах и операционных системах. Из-за этого вы можете использовать только функции, находящиеся в поддерживаемой версии Mono.

Однако, если вы посмотрите at their roadmap альфа-сборки, вы увидите

сценариев: компилятора C# Обновление
Upgrade Mono C# компилятор против нашего текущего .Net 2.0 и 2.0 профилей подмножестве. Обратите внимание, что это обновление на C# компилятор только не полный Mono выполнения

Затем далее в фазе "исследования"

Scripting: .NET профиль Обновление
Upgrade .Net до 4.6, предоставляя доступ к последним функциям .Net и API.


UPDATE:

Вы можете получить экспериментальную сборку, которая использует 4,6 профиль из the stickied post here.

Вот ноты для 5.6.0b5 beta release

  • Для этого выпуска, редактор и следующие игроки должны работать:
    • для Windows, OSX, Linux автономный
    • IOS с IL2CPP
    • Android с IL2CPP и моно
  • Другие платформы, как известно, еще не работают, и, вероятно, их не стоит устанавливать.
  • Управляемая отладка с помощью инструментов Visual Studio для Unity или MonoDevelop не поддерживается в этой версии. Если вы хотите использовать VSTU для редактирования , используйте специальную сборку, связанную внизу этого сообщения .
  • Компилятор нацелен на язык C# 6.
  • Компилятор по умолчанию по-прежнему будет нацелен на профиль каркаса .Net 4.6.
  • Известные проблемы
    • /Mono сборки Android не правильно работать с управляемым кодом зачистки. На данный момент отключите отмену управляемого кода.
    • Для некоторых проектов автономный проигрыватель Windows может разбиться на Windows 8.1. Это прерывистый, поэтому мы хотели бы видеть какие-либо аварии отчеты или данные об этом
+0

Для человека, который был ниспадающим, сообщите мне, почему вы считали, что мой ответ не был полезен, поэтому я могу его исправить. –

+0

Так как Mono является платформой .NET и предназначен для кросс-платформенных приложений, он содержит только подмножество полного набора классов в .NET? Следовательно, поскольку Unity построен поверх Mono, вы можете использовать только классы, поддерживаемые Mono? – Amposter

+1

Правильно, вы можете использовать только классы, поддерживаемые версией mono Unity. Моно Моно может сделать много .NET 4.5, но Unity еще не использует современный Mono, но он обновляется в своей дорожной карте. –

1

Аналогичный вопрос был дан ответ, прежде чем here. Как я описал в вашем другом вопросе, вы можете «вводить» новые вещи и использовать их, но рано или поздно они будут иметь неприятные последствия (например, не могут компилироваться в определенные системы, могут компилироваться, но не могут быть опубликованы в любом мобильном магазине, на удивление медленном исполнение, огромные сборки и т. д. В худшем случае ваш проект будет скомпрометирован).
Если вы действительно не можете реорганизовать проект, над которым работаете, и вы чувствуете, что вы должны использовать «современную технологию», помните, что код введенных классов должен быть объектами данных, а значит, вовсе не связан с GameObject.
Также рекомендуется получать от ScriptableObject, когда и где это возможно.

EDIT: Но я бы порекомендовал то, что я сказал вам ранее (рефакторинг), или то, что описывает связанный ответ («экспортируйте» код, несовместимый с mono/.net2.0, на внешнюю dll и используйте его оттуда)