【Unity】シェーダでUNITY_VERSIONマクロを使ってUnityエディタのバージョンごとに処理を変える

UnityのシェーダでUNITY_VERSIONマクロを使ってUnityエディタのバージョンごとに処理を変える方法です。

Unity2020.3.15
Unity2021.2b

はじめに

Unityのシェーダ内でUNITY_VERSIONマクロを使うとUnityエディタのバージョンに応じて処理を変えることができます。
本記事ではこれの使い方についてまとめます。

なおシェーダはURPのものですが、マクロ自体はビルトインパイプラインでも使えます。

シェーダ

それでは早速シェーダを書きます。

Shader "URPShaderExample"
{
    SubShader
    {
        Tags
        {
            "RenderType" = "Opaque"
            "RenderPipeline" = "UniversalPipeline"
            "IgnoreProjector" = "True"
            "Queue" = "Geometry"
        }

        Pass
        {
            Tags { "LightMode" = "UniversalForward" }

            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            #if UNITY_VERSION >= 202110 // Unity2021.1.0以上の場合
                #define COLOR half4(0, 1, 0, 1);
            #else
                #define COLOR half4(1, 0, 0, 1);
            #endif

            struct Attributes
            {
                float4 positionOS : POSITION;
            };

            struct Varyings
            {
                float4 positionHCS : SV_POSITION;
            };

            Varyings vert(Attributes IN)
            {
                Varyings OUT;
                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                return OUT;
            }

            half4 frag(Varyings IN) : SV_Target
            {
                return COLOR;
            }
            ENDHLSL
        }
    }
}

Unity2021.1.0以上の場合には緑色を出力し、それより前のバージョンでは赤色を出力しています。

結果

まずUnity2020.3.15で結果を見てみます。

f:id:halya_11:20210909104706p:plain
Unity2020.3.15

赤色が出力されていることが確認できました。

次にUnity2021.2bで確認します。

f:id:halya_11:20210909104805p:plain
Unity2021.2b

出力が緑色になっていることを確認できました。

参考

forum.unity.com

docs.unity3d.com