Ветка, основанная на платформе или графике API
Чтобы создать оптимизированный код шейдера для платформы, разветвите код шейдера, используя один из макросов препроцессора, определенных Unity.
#if defined(SHADER_API_D3D11)
// Shader code for when the target graphics API is DirectX 11
#endif
Ветвь, основанная на цели сборки
Unity определяет следующие макросы, когда вы делаете соответствующую платформу целью для вашей сборки.
| Макро | Платформа |
|---|---|
UNITY_PLATFORM_ANDROID |
Android устройства |
UNITY_PLATFORM_EMBEDDED_LINUX |
Встроенные устройства Linux |
UNITY_PLATFORM_GAMECORE_XBOXONE |
Xbox One Game Основной |
UNITY_PLATFORM_IOS |
iOS устройства |
UNITY_PLATFORM_LINUX |
Linux устройства |
UNITY_PLATFORM_OSX |
macOS устройства |
UNITY_PLATFORM_PS4 |
PlayStation®4 |
UNITY_PLATFORM_PS5 |
PlayStation®5 |
UNITY_PLATFORM_QNX |
QNX устройства |
UNITY_PLATFORM_SWITCH |
Nintendo Switch™ |
UNITY_PLATFORM_SWITCH2 |
Nintendo Switch™ 2 |
UNITY_PLATFORM_TVOS |
tvOS устройства |
UNITY_PLATFORM_UWP |
Универсальные устройства платформы Windows (UWP) |
UNITY_PLATFORM_VISIONOS |
visionOS устройства |
UNITY_PLATFORM_WEBGL |
WebGL устройства |
UNITY_PLATFORM_WINDOWS |
Windows устройства |
UNITY_PLATFORM_XBOXONE |
Xbox One |
Ветвь в ветви платформы
Чтобы вновь ветвиться в коде ветвления для конкретной платформы, объявьте ключевое слово shader после тестирования для платформы, а затем ветвьтесь с помощью этого ключевого слова. Например:
// Test if the build target is Android
#if defined(UNITY_PLATFORM_ANDROID)
// Add a keyword only if the build target is Android
#pragma shader_feature _ ANDROID_REFLECTIONS
#endif
...
fixed4 frag (v2f i) : SV_Target
{
// Test if the build target is Android
#if defined(UNITY_PLATFORM_ANDROID)
// Test if your custom keyword is enabled
#if ANDROID_REFLECTIONS
// Shader code for Android with reflections
#else
// Shader code for Android without reflections
#endif
#endif
...
}
Дополнительные сведения см. в Изменение работы шейдеров с помощью ключевых слов.
Ветка, основанная на целевой графике API
Unity определяет следующие макросы, когда Unity компилирует шейдеры для соответствующей графики API.
| Макро | Графика API |
|---|---|
SHADER_API_D3D11_9X |
DirectX 11 функций уровня 9, для устройств универсальной Windows платформы (UWP) |
SHADER_API_D3D11 |
DirectX 11 |
SHADER_API_DESKTOP |
Графика APIs, используемая устройствами Windows, устройствами macOS, настольными платформами Linux и веб-устройствами |
SHADER_API_GLCORE |
OpenGL 3.x, OpenGL 4.x |
SHADER_API_GLES3 |
OpenGL ES 3.x |
SHADER_API_METAL |
Metal на iOS или macOS |
SHADER_API_MOBILE |
Графика APIs, используемая мобильными устройствами iOS и Android и устройствами tvOS |
SHADER_API_VULKAN |
Vulkan |
SHADER_API_WEBGPU |
WebGPU |
SHADER_TARGET_GLSL |
OpenGL и GLES платформы, где Unity компилирует HLSL в GLSL |