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

Mono Скриптирование

Скриптовый бэкенд Mono — это ответвление Unity от проекта Mono с открытым исходным кодом. Mono — зрелая кроссплатформенная среда выполнения .NET, на которой работают Editor и Players Unity на совместимых платформах. Она обеспечивает быстрые итерации и удобные инструменты, но её производительность во время выполнения ниже, чем у IL2CPP, и она не соответствует новейшим возможностям .NET.

Mono использует компиляцию непосредственно перед выполнением (JIT), чтобы во время выполнения преобразовывать код C# в машинный код. Mono управляет жизненным циклом управляемых объектов, обрабатывает перезагрузку кода и автоматически удаляет объекты, вышедшие из области видимости, с помощью сборщика мусора Boehm-Demers-Weiser. Поведение сборщика мусора можно в некоторой степени настраивать. Дополнительные сведения см. в разделе Режимы сборки мусора.

Mono поддерживает отладку управляемого кода. Дополнительные сведения см. в Отладка кода C# в Unity.

Создание проекта с Mono

Чтобы начать процесс сборки, откройте окно Создание профилей (Меню: Файл > Создание профилей) и выберите Строительство.

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

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

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

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

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

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

Как Mono, так и IL2CPP требуют новой сборки для каждой платформы, на которую вы хотите ориентироваться. Например, для поддержки платформ Android и iOS вам необходимо компилировать приложение дважды и создать два бинарных файла, один для Android и один для iOS.

Перезагрузка домена

Unity Editor встраивает Mono, так что ваш код C# управляется Mono и подчиняется ограничениям Mono при запуске в режиме воспроизведения редактора. Ключевым аспектом этого является то, что вход и выход из режима воспроизведения или перекомпиляция скриптов вызывают AppDomain перезагрузки, при которых сбрасывается статическое состояние. Вы можете настроить, как Unity входит в режим воспроизведения и отключить перезагрузку домена, чтобы ускорить итерации, — но тогда ваш код должен сам сбрасывать статическое состояние. Подробнее см. Перейти в режим воспроизведения с отключенной перезагрузкой домена.

Оптимизация сборок Mono

Mono и IL2CPP используют одну и ту же базовую библиотеку классов .NET, поэтому многие проблемы производительности и рекомендации применимы к обоим. Однако в контексте Mono учитывайте следующее:

  • Компиляция JIT Mono означает, что она может иметь более низкую производительность во время выполнения и более длинное время запуска в больших кодах по сравнению с компиляцией AOT IL2CPP. Always profile с Unity Profiler для обнаружения горячих точек GC и JIT. Инструмент Project Ревизор также может помочь вам идентифицировать и устранить общие проблемы производительности. Дополнительные сведения см. в Оптимизация.
  • Некоторые методы кодирования, например те, которые вызывают большое количество выделений во время выполнения, могут увеличить накладные расходы сборщика мусора и ухудшить производительность. Руководство по написанию эффективного управляемого кода в Unity см. в разделе Оптимизация кода для управляемой памяти. Сведения о отслеживании и сокращении накладных расходов сборщика мусора см. в разделе Управляемая память.
  • Unity APIs обычно не являются потоковыми, что означает, что они должны вызываться из главного потока Unity. Не используйте .NET Task с Unity APIs.
  • Реализации ,DateTime,, ,TimeZoneInfo,и ,CultureInfo, в Mono могут отличаться от поведения Windows, .NET. Обязательно проверяйте глобализованный, культурно-специфический код на целевых платформах.

Оптимизация производительности во время выполнения с Burst

В соответствующих проектах вы можете улучшить производительность проекта во время выполнения, используя компилятор Burst вместе с Mono для компиляции совместимых разделов вашего кода в высокооптимизированный машинный код. Дополнительную информацию см. в Burst компиляция.

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