Unity 6.3
0 онлайн 57 гостей 3 в системе
Вход
Программирование в Unity Шаг 10 из 210

Уровни совместимости API для .NET

Unity поддерживает два уровня совместимости с API .NET, под которые может компилироваться код вашего проекта. Выбранный уровень определяет, какие библиотеки классов .NET доступны вашему коду C#. Доступны следующие уровни:

  • .NET Стандарт 2.1: .NET Стандарт 2.1, опубликованный Фондом .NET. Это Уровень совместимости API по умолчанию.
  • .NET Рамки: .NET Framework 4.8, опубликованный Microsoft, плюс дополнительный APIs из .NET Standard 2.1.

Чтобы изменить профиль .NET:

  • В течение Unity Editor, перейти Изменить > Project Настройки. В Игрок вкладке, перейти к Другие настройки вкладке и в Конфигурация раздел, набор Уровень совместимости API на желаемую настройку.
  • Из кода, используйте PlayerSettings.SetAPICompatibilityLevel.

Выбор уровня совместимости API

В целом, для всех новых проектов предпочтительнее использовать .NET Standard, а не .NET Framework по следующим причинам:

  • .NET Стандартный является меньшей поверхностью API и поэтому имеет меньшую реализацию. Это уменьшает размер вашего окончательного исполняемого файла.
  • .NET Стандартный имеет лучшую кросс-платформенную поддержку, так что ваш код более вероятно работать на всех платформах. Хотя некоторые платформы не полностью поддерживают NET Стандарт, .NET Вариант framework менее подходит для кросс-платформенной совместимости. .NET Рамочный профиль включает все APIs в 2000 году .NET Стандартный профиль плюс дополнительный APIs, некоторые из которых могут работать на нескольких платформах или вообще не работать.
  • Все среды выполнения .NET поддерживают .NET Standard, поэтому ваш код работает в большем количестве сред выполнения (например, .NET Framework, .NET Core, Xamarin, Unity), когда вы используете .NET Standard.
  • .NET Standard переносит больше ошибок на время компиляции. Некоторые APIs в .NET Framework доступны во время компиляции, но имеют реализации на некоторых платформах, которые вызывают исключение во время выполнения.

Уровень совместимости .NET Framework API может быть полезен, если, например, вам необходимо обеспечить поддержку более старого существующего приложения.

Управление плагинами

Управление плагинами являются .NET собраний, управление которыми осуществляется вне фреймворков Unity в динамически связанные библиотеки (DLLs). Вы можете использовать управляемые плагины с любым из доступных API Однако уровень поддержки варьируется в зависимости от типа устройства, которое вы используете. API уровня, на котором были скомпилированы управляемые плагины. .NET Рамки API поверхность больше, чем .NET Стандартный, если ваш проект ориентирован на .NET Стандарт, то он может не поддерживать все плагины, скомпилированные против .NET В следующей таблице указаны конфигурации, которые Unity поддерживает:

Цель компиляции управляемого плагина .NET Стандартный 2.1 .NET Рамки 4.x
.NET Стандарт (любая версия) Поддерживаемые Поддерживаемые
.NET Рамки (любая версия) Ограниченная поддержка Поддерживаемые
.NET Ядро (любая версия) Не поддерживается Не поддерживается

Сторонние библиотеки .NET

Используйте только сторонние библиотеки .NET, которые были тщательно протестированы на широком спектре конфигураций и платформ Unity.

Mono: JIT-компиляция этого скриптового бэкенда позволяет динамически создавать код на промежуточном языке C#/.NET (IL) во время выполнения приложения. IL2CPP: AOT-компиляция этого скриптового бэкенда не поддерживает динамическое создание кода.

Это важно учитывать при использовании сторонних библиотек, поскольку у них могут быть разные пути к коду для компиляции JIT и AOT, или они могут использовать пути к коду, которые зависят от динамически генерируемого кода. Дополнительные сведения о том, как генерировать код во время выполнения, см. в документации Microsoft ModuleBuilder.

Характеристики производительности JIT и AOT путей кода в сторонних библиотеках могут значительно отличаться. AOT обычно сокращает время запуска и подходит для более крупных приложений по этой причине, но увеличивает размер двоичного файла, чтобы вместить скомпилированный код. AOT также занимает больше времени для компиляции во время разработки.

JIT настраивается во время выполнения в зависимости от платформы, на которой оно работает, что может улучшить производительность во время выполнения за счет потенциально более длительного времени запуска приложения. Поэтому рекомендуется профилировать приложение как в Редакторе, так и на целевой платформе. Дополнительную информацию см. в обзоре Profiler.

При просмотре сторонней библиотеки обратите внимание на следующие моменты:

  • Совместимость: Библиотеки сторонних разработчиков могут быть несовместимы с некоторыми платформами Unity и скриптовыми бэкэндами.
  • Производительность: Сторонние библиотеки могут иметь очень разные характеристики производительности в Unity по сравнению с другими .NET времени выполнения.
  • Размер двоичного файла AOT: Сторонние библиотеки могут значительно увеличить размер двоичного файла AOT из-за количества зависимостей, используемых библиотекой.

.NET Библиотеки системы

Unity поддерживает множество платформ и может использовать различные скриптовые бэкэнды в зависимости от платформы. .NET System пространства имен требуют реализаций, специфичных для платформы, чтобы работать правильно в некоторых случаях. Unity пытается поддержать как можно больше из .NET экосистемы, насколько это возможно, есть некоторые части .NET System библиотек, которые Unity явно не поддерживает:

  • Unity не предоставляет никаких гарантий производительности или распределения библиотек .NET System между версиями Unity.
  • Как правило, Unity не исправляет никаких регрессий производительности в библиотеках .NET и System.
  • Unity не поддерживает библиотеки System.Drawing и не гарантирует работу на всех платформах.

Тип: Профиль использования вашего .NET Системные библиотеки на всех целевых платформах, поскольку их характеристики производительности могут варьироваться в зависимости от бэкэндов скриптов, .NET версии, и API используемый уровень совместимости.

Безопасность транспортного уровня (TLS) 1.2

UnityWebRequest API и все .NET Framework Web APIs полностью поддерживают TLS 1.2 на всех платформах, за исключением Web. Веб-платформа использует настройки безопасности из браузера, в котором запускается приложение, и веб-сервера вместо этого. Локальное хранилище сертификатов конкретной платформы автоматически проверяет сертификаты TLS, если они доступны. Если доступ к хранилищу сертификатов невозможен, Unity использует встроенное хранилище корневых сертификатов.

Дополнительные ресурсы