Я подозреваю, что изменения, на которые вы ссылаетесь, являются базовыми различиями, а не языком C #. В Unity3d вы используете .Net framework (Via Mono) и специфичные для Unity элементы каркаса с языком C #.
Майк Б
Это просто очень старая версия. Если вам нужна последняя версия C # и Mono и вы хотите программировать, а не писать сценарии для готового
Den
Я заметил небольшие различия в библиотеках, например, в Unity есть класс Mathf для математических функций, а не класс Math. Я не обратил внимания, есть ли другие различия, но это то, что выделилось.
Алекс
@Alex System.Math по-прежнему доступен и, по-видимому, на самом деле быстрее, чем UnityEngine.Mathf . Таким образом, единственная реальная причина использования версии Unity - избегать большого количества (плавающих) приведений .. за счет некоторой производительности.
FlintZA
Ответы:
9
Как указано в других ответах, Unity 4.x использует модифицированную версию Mono на основе Mono 2.6.
По большей части это совместимо с .Net 2.0 , хотя мне не удалось отследить конкретный список совместимости Mono 2.6.
Это выглядит не так, как в обычном C #, но там есть несколько обычных элементов C #.
Как упоминалось в одном из комментариев к вашему вопросу, это, скорее всего, связано с конкретным API сценариев Unity, а не с самим языком.
Например, большая часть кода в типичных проектах Unity содержится в подклассах класса с именем MonoBehavior. Это компоненты, которые отбрасываются на GameObjects в среде редактора Unity. Эта архитектура приводит к коду C #, который выглядит по-разному типичному коду C # (во всяком случае, мне) несколькими способами:
До выхода Unity 4 эти объекты не могли содержаться в пространствах имен, поэтому они всегда находятся в глобальном пространстве имен.
Они открывают поля для среды редактора, делая их общедоступными (или используя атрибут SerializeField, но я нахожу, что очень немногие используют это), что приводит к необычно большому количеству открытых полей в классах
Соглашения Unity о конфиденциальности и делах не соответствуют Microsoft, так что это может показаться странным для «традиционного» разработчика на C #
Они используют ряд специальных методов для этих компонентов, таких как Start и Update, которые не являются переопределениями, как обычно ожидалось, но вместо этого доступны посредством отражения.
Практически говоря, самая большая особенность языка C #, которую мне не хватает в текущей версии Unity для C #, - это поддержка асинхронных и связанных ключевых слов и функций. Похожая концепция в Unity - сопрограммы . Они выполняются в главном потоке, поэтому не являются истинными асинхронными, но позволяют разбить долго выполняющийся код на несколько кадров. Многопоточность на более низком уровне все еще поддерживается.
Просто чтобы уточнить, asyncв C # также не верно асинхронно, как в многопоточном - он также работает в основном потоке. Самые большие различия с точки зрения использования между сопрограммами и асинхронностью - это время выполнения кода.
фыркает
Благодарю. Да, async! = Многопоточность, хотя я бы сказал, что гораздо чаще встречается использование async для скрытия / взаимодействия с многопоточными операциями, чем с сопрограммами. Я написал сопрограмму-обертку, которая запускает задачи делегатов в пуле потоков, что дает мне очень похожий уровень гибкости, но я все еще не возражаю против наличия «правильной» асинхронной поддержки. Конечно, приличный современный GC будет еще лучше;)
FlintZA
21
Unity 4 использует Mono 2.6 , которая является полной реализацией платформы .NET, включая язык C #.
Я не уверен, как это выглядит по-разному, но имейте в виду, что Unity поддерживает несколько языков, каждый из которых работает поверх одной и той же среды выполнения Mono. Возможно ли, что вы путаете C # с UnityScript ?
Опять же, когда вы пишете C # в Unity, вы будете использовать множество их библиотек, но, насколько я знаю, все возможное в C # возможно в Unity, кроме отличий, перечисленных ниже:
Более конкретные области .Net, связанные с Windows Forms и ASP, запрещены через Unity.
Хотя вы можете использовать Visual Studio для редактирования и ошибок во время компиляции, вы должны создавать и запускать в Unity IDE.
Unity использует Mono, которая является реализацией .Net с открытым исходным кодом, что означает, что есть небольшие различия.
Чтобы расширить ваш второй пункт - вы также можете отлаживать в Visual Studio с помощью UnityVS . Microsoft недавно приобрела разработчиков, поэтому они выпустят плагин бесплатно в ближайшем будущем.
mrohlf
Извините, но это далеко не обычный C #.
Альпер
0
На вопрос о том, отличается ли версия C #, используемая Unity, от «обычной» версии C #, были даны ответы в других сообщениях. Поскольку вы явно запрашиваете определенные элементы, которые могут отличаться от такой обычной версии, я поделюсь единственным незначительным отличием, которое я заметил при сравнении C #, который я использую на работе (то есть C # 4.0 в Visual Studio 2010 и более поздних версиях) и C # в Unity, который является то, что я не могу использовать значения по умолчанию для параметров в определениях функций. что вам нужно более тщательно настроить свой проект, чтобы использовать более новую версию C #. Смотрите эту ссылку для дальнейшего объяснения.
Редактировать:
я оставляю этот ответ, поскольку, насколько я знаю, это недоразумение, которое случается с довольно многими людьми.
Поскольку эта функция была добавлена только в C # в версии 4.0 и ранее не присутствовала, ее отсутствие нельзя назвать «отличием» от «C #».
ИЛИ Mapper
1
Версия C # 4 была выпущена в 2010 году. Я думаю, что многие люди используют ее и чувствуют, как и я, ее отсутствие при программировании в Unity.
Нессуно
Вы уверены, что не можете использовать значения по умолчанию? Я уверен, что у меня есть и есть ...
NPSF3000
Я попытался, и он не скомпилируется с сообщением о том, что я не могу использовать значения по умолчанию. Вы используете специальную версию Unity? Понравилась про версия?
Нессуно
1
Вы можете использовать значения по умолчанию, и это не имеет ничего общего с про или не про. Unity и MonoDevelop имеют странные отношения. Автоматически созданные проекты в MonoDevelop часто устанавливаются на более ранние версии C #, которые не поддерживают значения по умолчанию. Однако, если вы измените этот параметр в проекте, он будет работать нормально. Если вы игнорируете компиляцию в MonoDevelop и просто возвращаетесь к Unity, вы заметите, что Unity не жалуется на параметры по умолчанию.
Ответы:
Как указано в других ответах, Unity 4.x использует модифицированную версию Mono на основе Mono 2.6.
По большей части это совместимо с .Net 2.0 , хотя мне не удалось отследить конкретный список совместимости Mono 2.6.
Как упоминалось в одном из комментариев к вашему вопросу, это, скорее всего, связано с конкретным API сценариев Unity, а не с самим языком.
Например, большая часть кода в типичных проектах Unity содержится в подклассах класса с именем MonoBehavior. Это компоненты, которые отбрасываются на GameObjects в среде редактора Unity. Эта архитектура приводит к коду C #, который выглядит по-разному типичному коду C # (во всяком случае, мне) несколькими способами:
Практически говоря, самая большая особенность языка C #, которую мне не хватает в текущей версии Unity для C #, - это поддержка асинхронных и связанных ключевых слов и функций. Похожая концепция в Unity - сопрограммы . Они выполняются в главном потоке, поэтому не являются истинными асинхронными, но позволяют разбить долго выполняющийся код на несколько кадров. Многопоточность на более низком уровне все еще поддерживается.
источник
async
в C # также не верно асинхронно, как в многопоточном - он также работает в основном потоке. Самые большие различия с точки зрения использования между сопрограммами и асинхронностью - это время выполнения кода.Unity 4 использует Mono 2.6 , которая является полной реализацией платформы .NET, включая язык C #.
Я не уверен, как это выглядит по-разному, но имейте в виду, что Unity поддерживает несколько языков, каждый из которых работает поверх одной и той же среды выполнения Mono. Возможно ли, что вы путаете C # с UnityScript ?
источник
Unity использует обычный C #.
Опять же, когда вы пишете C # в Unity, вы будете использовать множество их библиотек, но, насколько я знаю, все возможное в C # возможно в Unity, кроме отличий, перечисленных ниже:
Более конкретные области .Net, связанные с Windows Forms и ASP, запрещены через Unity.
Хотя вы можете использовать Visual Studio для редактирования и ошибок во время компиляции, вы должны создавать и запускать в Unity IDE.
Unity использует Mono, которая является реализацией .Net с открытым исходным кодом, что означает, что есть небольшие различия.
источник
На вопрос о том, отличается ли версия C #, используемая Unity, от «обычной» версии C #, были даны ответы в других сообщениях. Поскольку вы явно запрашиваете определенные элементы, которые могут отличаться от такой обычной версии, я поделюсь единственным незначительным отличием, которое я заметил при сравнении C #, который я использую на работе (то есть C # 4.0 в Visual Studio 2010 и более поздних версиях) и C # в Unity,
который является то, что я не могу использовать значения по умолчанию для параметров в определениях функций.что вам нужно более тщательно настроить свой проект, чтобы использовать более новую версию C #. Смотрите эту ссылку для дальнейшего объяснения.Редактировать: я оставляю этот ответ, поскольку, насколько я знаю, это недоразумение, которое случается с довольно многими людьми.
источник