Unity 6.3
0 онлайн 36 гостей 3 в системе
Вход

Ветка, основанная на платформе или графике 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

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