All In 1 Sprite ShaderのURPがUnity2021.2.0以降でエラーになる場合

本当は本家に直してもらうのが一番いいけど修正されるまでは自力で直さないと正常に動作しないので修正方法の紹介です。

発生するエラーは以下の通りです。

'CombinedShapeLightShared': cannot implicitly convert from 'half4' to 'struct SurfaceData2D'

これは、Unity 2021.2.0 以降 URPのパッケージが「12.1.0」に更新された関係で「CombinedShapeLightShared」の引数が変わった(?)ため「All In 1 Sprite Shader」の「AllIn1Urp2dRenderer.shader」でエラーが発生し使用しているスプライトが描画されずにピンク色になります。

f:id:Takachan:20211120174232p:plain

本件以下の通りシェーダーを修正する必要があります。「AllIn1Urp2dRenderer.shader」の以下行を

// AllIn1Urp2dRenderer.shader
// 1183行目:

half3 lightResult = CombinedShapeLightShared(col, mask, i.lightingUV).rgb;

以下のように変更して保存して(エディタ上でCtrl + R)を押してください。

// AllIn1Urp2dRenderer.shader
// 1183行目:

#if UNITY_VERSION  < 202120
        half3 lightResult = CombinedShapeLightShared(col, mask, i.lightingUV).rgb;
#else
        SurfaceData2D surfaceData;
        InputData2D inputData;

        surfaceData.albedo = col.rgb;
        surfaceData.alpha = 1;
        surfaceData.mask = mask;

        inputData.uv = i.uv;
        inputData.lightingUV = i.lightingUV;

        half3 lightResult = CombinedShapeLightShared(surfaceData, inputData).rgb;
        //half4 lightResult = CombinedShapeLightShared(surfaceData, inputData);
#endif

これで正常に動作するようになります。

f:id:Takachan:20211120174348p:plain

以上です。