Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Поддержка Unity языка C# включает использование директив, которые позволяют выборочно включать или исключать код из компиляции в зависимости от того, являются ли определенные символы сценариев определено или не определено.

Подробнее о том, как эти директивы работают в C#, можно прочитать на странице Страница директив препроцессора Microsoft C#.

В Unity есть ряд встроенных символов сценариев, представляющих параметры, которые вы можете использовать в своих скриптахКусок кода Это позволяет вам создавать свои собственные Компоненты, запускать игровые события, изменять свойства Компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом. Подробнее
См. Словарь
, чтобы выборочно включать или исключать части кода из компиляции.

Например, встроенный символ сценария, который задается при создании проигрывателя для автономной платформы Windows, — UNITY_STANDALONE_WIN. Вы можете проверить, определен ли этот символ, используя оператор if специального типа следующим образом:

#if UNITY_STANDALONE_WIN Debug.Log("Standalone Windows"); #endif

Символ решетки (#) перед if и endif указывает, что эти операторы являются «директивами» и обрабатываются в процессе компиляции, а не во время выполнения.

Поэтому в приведенном выше примере строка Debug включена только для компиляции в автономную сборку проекта Windows. Он полностью опускается при компиляции в редакторе или в других целевых сборках. Это отличается от использования обычной структуры if .. then .. else, которая обходит только выполнение определенных частей кода во время выполнения. Полные примеры см. ниже.

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

Кроме того, вы можете определить свои собственные символы сценариев либо с помощью редактора UI(пользовательский интерфейс) Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в Словарь
, с помощью скрипта или файла актива, что позволяет для управления компиляцией частей вашего кода на основе произвольных определений. Дополнительные сведения см. в разделе Пользовательские символы сценариев.

Примечание. Скриптовые символы иногда называют «определяющими символами», «определяемыми препроцессором» или просто «определяющими».

Скриптовые символы платформы

Unity автоматически определяет определенные символы сценариев в зависимости от целевой платформы разработки и сборки. Они заключаются в следующем:

Определение Функции
UNITY_EDITOR Символ скрипта для вызова скриптов редактора Unity из кода игры..
UNITY_EDITOR_WIN Символ сценария для кода редактора в Windows.
UNITY_EDITOR_OSX Символ сценария для кода редактора в Mac OS X.
UNITY_EDITOR_LINUX Символ сценария для кода редактора в Linux.
UNITY_STANDALONE_OSX Символ сценария для компиляции или выполнения кода специально для Mac OS X (включая архитектуры Universal, PPC и Intel).
UNITY_STANDALONE_WIN Символ сценария для компиляции/выполнения кода специально для автономных приложений Windows.
UNITY_STANDALONE_LINUX Символ сценария для компиляции/выполнения кода специально для автономных приложений Linux..
UNITY_STANDALONE Символ сценария для компиляции/выполнения кода для любой автономной платформы (Mac OS X, Windows или Linux).
UNITY_WII Символ сценария для компиляции/выполнения кода для консоли Wii.
UNITY_IOS Символ скрипта для компиляции/выполнения кода для платформы iOS.
UNITY_IPHONE Устарело. Вместо этого используйте UNITY_IOS.
UNITY_ANDROID Скриптовый символ для платформы Android.
UNITY_PS4 Символ сценария для запуска кода PlayStation 4.
UNITY_XBOXONE Символ сценария для выполнения кода Xbox One.
UNITY_LUMIN Скриптовый символ для платформы Magic Leap OS. Вы также можете использовать PLATFORM_LUMIN.
UNITY_TIZEN Скриптовый символ для платформы Tizen.
UNITY_TVOS Скриптовый символ для платформы Apple TV.
UNITY_WSA Символ скрипта для универсальной платформы WindowsФункция IAP, поддерживающая симулятор Microsoft In App Purchase, который позволяет тестировать потоки покупок IAP на устройствах перед публикацией вашего приложения. Дополнительная информация
См. в Словарь
. Кроме того, NETFX_CORE определяется при компиляции файлов C# с использованием .NET Core и использовании .NET серверной части сценариевA Фреймворк, поддерживающий сценарии в Unity. Unity поддерживает три различных бэкэнда для сценариев в зависимости от целевой платформы: Mono, .NET и IL2CPP. Однако универсальная платформа Windows поддерживает только два: .NET и IL2CPP. More info
See in Словарь
.
UNITY_WSA_10_0 Символ сценария для универсальной платформы Windows. Кроме того, WINDOWS_UWP определяется при компиляции файлов C# для .NET Core.
UNITY_WINRT То же, что и UNITY_WSA.
UNITY_WINRT_10_0 Эквивалентно UNITY_WSA_10_0
UNITY_ANALYTICS Символ скрипта для вызова Unity AnalyticsСокращение Unity Analytics
Просмотрите методы Словарь
из кода вашей игры. Версия 5.2 и выше.
UNITY_ASSERTIONS Символ сценария для процесса контроля утверждений.
UNITY_64 Символ скрипта для 64-битных платформ.

Версия редактора Символы сценариев

Unity автоматически определяет определенные символы сценариев в зависимости от версии редактора, которую вы используете в данный момент.

Учитывая номер версии X.Y.Z (например, 2019.4.14), Unity предоставляет три глобальных символа сценария в следующих форматах: UNITY_X, UNITY_X_Y и UNITY_X_Y_Z.

Вот пример символов сценариев, представленных в Unity 2019.4.14:

Определение Функции
UNITY_2019 Символ сценария для выпускной версии Unity 2019, отображаемый в каждом выпуске 2019.YZ.
UNITY_2019_4 Символ скрипта для основной версии Unity 2019.4, представленный в каждом выпуске 2019.4.Z.
UNITY_2019_4_14 Скриптовый символ для минорной версии Unity 2019.4.14.

Вы также можете выборочно компилировать код на основе самой ранней версии Unity, необходимой для компиляции или выполнения данной части кода. Учитывая тот же формат версии, что и выше (X.Y), Unity предоставляет один глобальный #define в формате UNITY_X_Y_OR_NEWER, который вы можете использовать для этой цели.

Другие символы сценариев

Другие символы сценариев, которые определяет Unity:

Определение Функции
CSHARP_7_3_OR_NEWER Определяется при создании скриптов с поддержкой C# 7.3 или новее..
ENABLE_MONO Серверная часть скрипта #define для Mono.
ENABLE_IL2CPP Серверная часть сценариев #define для IL2CPPРазработанная Unity внутренняя часть сценариев, которую можно использовать в качестве альтернативы Mono при создании проектов для некоторые платформы. More info
See in Словарь
.
NET_2_0 Определяется при создании скриптов на уровне совместимости API .NET 2.0 в Mono и IL2CPP.
NET_2_0_SUBSET Определяется при создании скриптов на уровне совместимости .NET 2.0 Subset API в Mono и IL2CPP.
NET_LEGACY Определяется при создании скриптов для уровня совместимости .NET 2.0 или .NET 2.0 Subset API в Mono и IL2CPP.
NET_4_6 Определяется при создании скриптов на уровне совместимости API .NET 4.x в Mono и IL2CPP.
NET_STANDARD_2_0 Определяется при создании скриптов на уровне совместимости API .NET Standard 2.0 в Mono и IL2CPP.
ENABLE_WINMD_SUPPORT Определяется, когда на IL2CPP включена поддержка среды выполнения Windows. Дополнительные сведения см. в разделе Поддержка среды выполнения Windows..
ENABLE_INPUT_SYSTEM Определяется, когда пакет системы ввода включен в настройках игроканастройках, которые позволяют вам устанавливать различные параметры для конкретного игрока для окончательной игры, созданной Единство. More info
See in Словарь
.
ENABLE_LEGACY_INPUT_MANAGER Определяется в устаревших настройках Input Manager, где вы можете определить все различные оси ввода, кнопки и элементы управления для вашего проекта. Подробнее
See in Словарь
включен в настройках проигрывателя.
UNITY_SERVER Определяется, когда параметр сборки сервера включен в настройках сборки.
DEVELOPMENT_BUILD Определяется, когда ваш скрипт запускается в проигрывателе, созданном с использованием «разработкиразработки включает символы отладки и включает профилировщик . Подробнее
Опция See in Словарь
» включена.

Тестирование предварительно скомпилированного кода

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

Прежде всего выберите платформу, на которой вы хотите протестировать свой код, выбрав Файл > Настройки сборки. Отобразится окно Настройки сборки; выберите целевую платформу здесь.

Окно настроек сборки с ПК, Mac и Linux, выбранными в качестве целевых платформ
Окно настроек сборки с ПК, Mac и Linux, выбранными в качестве целевых платформ

Выберите платформу, на которой вы хотите протестировать предварительно скомпилированный код, и нажмите Переключить платформу, чтобы сообщить Unity, на какую платформу вы ориентируетесь.

Создайте скрипт и скопируйте/вставьте следующий код:

using UnityEngine; using System.Collections; public class PlatformDefines : MonoBehaviour { void Start () { #if UNITY_EDITOR Debug.Log("Unity Editor"); #endif #if UNITY_IOS Debug.Log("Iphone"); #endif #if UNITY_STANDALONE_OSX Debug.Log("Stand Alone OSX"); #endif #if UNITY_STANDALONE_WIN Debug.Log("Stand Alone Windows"); #endif } }

Чтобы протестировать код, нажмите Режим воспроизведения. Убедитесь, что код работает, проверив соответствующее сообщение в консоли Unity в зависимости от выбранной вами платформы, например, если вы выбрали iOSМобильная операционная система Apple. Подробнее
См. в Словарь
, сообщение «Unity iOS» должно отображаться в консоль.

В C# вы можете использовать атрибут CONDITIONAL, который является более чистым и менее подверженным ошибкам способом выделения функций. См. класс ConditionalAttribute. Дополнительная информация. Обратите внимание, что на обычные обратные вызовы Unity (например, Start(), Update(), LateUpdate(), FixedUpdate(), Awake()) этот атрибут не влияет, потому что они вызываются непосредственно из движка и, по соображениям производительности, не принимать их во внимание.

Помимо основной директивы компилятора #if, вы также можете использовать многосторонний тест в C#:

#if UNITY_EDITOR Debug.Log("Unity Editor"); #elif UNITY_IOS Debug.Log("Unity iOS"); #else Debug.Log("Any other platform"); #endif
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3