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

Введение в создание скриптовых серверов

Базовый конец скриптов — это термин Unity для технологии времени выполнения, которая компилирует и выполняет ваши C# скрипты. Она определяет, как ваш код превращается в исполняемые инструкции, и какое время выполнения управляет им на целевых платформах.

Выбор бэк-энда для скриптов может повлиять на различные аспекты вашего проекта, включая:

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

Unity поддерживает следующие скриптовые бэкэнды:

  • Mono: реализация .NET Framework с открытым исходным кодом, основанная на стандартах ECMA для C# и Common Language Infrastructure (CLI). Mono использует компиляцию непосредственно перед выполнением (JIT), чтобы во время выполнения преобразовывать код C# в машинный код.
  • IL2CPP: разработанный Unity скриптовый бэкенд, который преобразует код и сборки C# в код C++. Затем этот код компилируется нативным для платформы компилятором C++ в двоичный файл для целевой платформы. IL2CPP использует опережающую (AOT) компиляцию, чтобы преобразовать код до начала его выполнения.

Поддержка платформы

Mono поддерживается на следующих платформах:

  • Windows x86/x64/Arm64
  • OSX x64/Arm64
  • Linux x64
  • Android Armv7

IL2CPP поддерживается на всех платформах.

Любая платформа, не упомянутая в предыдущем списке Mono-поддержка платформ является IL2CPP-только. На платформах, поддерживающих оба бэк-энда, Mono по умолчанию.

Примечание: Поддержка скриптирования может меняться между выпусками. Для получения последней информации, обратитесь к настройкам Player для конкретной платформы для вашей целевой платформы и версии Unity.

Изменение сервера скриптов

Вы можете изменить скриптовый бэкэнд, используемый Unity для создания вашего приложения, одним из двух способов:

  • Через меню Настройки Игрока в Редакторе. Выполните следующие действия, чтобы изменить скриптовый сервер через меню Настройки Игрока:

    1. Перейдите в Изменить > Project Настройки.
    2. Нажмите на кнопку Настройки Игрока, чтобы открыть Игрок settings для текущей платформы в Inspector.
    3. Перейдите в раздел Конфигурация в подменю Другие настройки.
    4. Нажмите на раскрывающееся меню Scripting Backend, затем выберите Mono или IL2CPP.

    Вы также можете открыть меню Настройки Игрока из окна Создание профилей; перейдите в Файл > Создание профилей и нажмите на вкладку Настройки Игрока.

  • С помощью редактора скриптов API. Используйте свойства PlayerSettings.SetScriptingBackend для изменения бэк-энда скриптов, используемого Unity.

Раздел Конфигурация настроек Player
Раздел Конфигурация настроек Проигрывателя

Сравнение скриптовых серверов

Доступная поверхность API C#/.NET у Mono и IL2CPP практически одинакова. Оба бэкенда скриптинга используют одну и ту же базовую библиотеку классов и поддерживают доступные API уровни совместимости. Однако, некоторые ограничения, специфические для IL2CPP и некоторых платформ AOT применяются. Для получения дополнительной информации, см. Ограничения IL2CPP.

В следующей таблице приведено сравнение ключевых функций Mono и IL2CPP бэк-эндов скриптов:

Особенности Mono IL2CPP
Модель исполнения Система " точно в срок " (JIT). Заблаговременно (AOT): C# до IL до C++ в основной код
Платформы Настольный компьютер и Android. Широкая поддержка и требуется для iOS и большинства консолей.
Кросс-компиляция Минимальный; JIT компилирует управляемые сборки по мере необходимости. Требуется C++ toolchain (Clang/MSVC), платформа SDKs; более длительные сроки сборки/подключения. Для более подробной информации см. Linux IL2CPP кросс-компилятор.
Время сборки Более быстрая итерация, меньшие шаги связывания. Медленнее (C++ codegen, компиляция и связывание), более крупные генерируемые кодовые базы.
Время запуска Обычно медленнее с JIT (warmup, JIT стоимость). Как правило, быстрее (полностью нативный, без JIT разогрева).
Использование памяти Меньше размер код с JIT Большие нативные двоичные файлы; дополнительно генерируется C++ и метаданные
Обработка исключений Управление исключениями через Mono runtime. Управляемая семантика, отображаемая в нативном режиме с помощью поддержки runtime IL2CPP.
Отражение Полное отражение работает, динамический кодген поддерживается. Отражение работает для существующих метаданных, но динамическое кодгенирование имеет ограничения. Методы System.Reflection.Emit и dynamic не поддерживаются.
Генерические лекарства Полная поддержка, JIT может специализироваться во время выполнения. AOT использует предварительную общую доступность, а IL2CPP могут понадобиться дополнительные подсказки AOT, чтобы избежать недостающих методов или ошибок типа во время выполнения. Дополнительные сведения см. в Общие типы и методы.
Снятие кодов/связка Управляемый линкер, легче держать символы из-за JIT. Более агрессивное удаление, требует аннотации или настройки для сохранения отраженных или динамически загруженных членов. Используйте файл link.xml или атрибут [Preserve] для сохранения типов и методов. Дополнительные сведения см. в Управляемое удаление кода.
Интероп (P/Invoke) По умолчанию P/Invoke, время выполнения разрешается при загрузке. Стандартный P/Invoke, имена должны совпадать, так как AOT/нативная двоичная связь более строга. Дополнительную информацию см. в Вызов управляемых методов из нативного кода.
Отладка (C#) Быстрая перезагрузка домена, редактирование и продолжение на платформах, поддерживающих JIT, информативные управляемые стеки по умолчанию. Поддерживается управляемая отладка, трассировки стека могут быть дополнительно расширены. Дополнительные сведения см. в IL2CPP управляемые трассировки стека.

На платформах, где вы можете выбрать между IL2CPP и Mono, предпочтите IL2CPP, если сборки Player требуют более быстрого запуска, более строгого соответствия платформе и более предсказуемой производительности. Mono обеспечивает более быструю итерацию в редакторе и разработке рабочего стола, более короткие сроки сборки и является единственным вариантом, если вам нужно использовать APIs , не поддерживаемые IL2CPP.

Совет: Независимо от того, какой скриптовый бэк-энд вы выберете, вы можете дополнить его компилятором Burst для компиляции отдельных частей вашего кода в высокооптимизированный нативный код. Для более подробной информации, см. Burst компиляция.

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