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で結果を見てみます。
赤色が出力されていることが確認できました。
次にUnity2021.2bで確認します。
出力が緑色になっていることを確認できました。