Поддержка 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 Словарь» включена. |
Тестирование предварительно скомпилированного кода
Ниже приведен пример использования предварительно скомпилированного кода. Он печатает сообщение, которое зависит от платформы, которую вы выбрали для своей целевой сборки.
Прежде всего выберите платформу, на которой вы хотите протестировать свой код, выбрав Файл > Настройки сборки. Отобразится окно Настройки сборки; выберите целевую платформу здесь.
Выберите платформу, на которой вы хотите протестировать предварительно скомпилированный код, и нажмите Переключить платформу, чтобы сообщить 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