【Unityシェーダ】ZWrite Onなのに描画順が崩れる場合の対応

問題

サーフェスシェーダで、半透明なシェーダを作っている際に描画順が崩れた。  

元コード↓

Shader "hoge/hoge"
{
    Properties
    { 
    }
    
    SubShader
    {
        ZWrite On

        Tags {
            "Queue" = "Transparent"
            "RenderType" = "Transparent"
        }
        
        CGPROGRAM
        
        #pragma surface surf Lambert alpha
        
        struct Input
        {
        };

        void surf (Input IN, inout SurfaceOutput o)
        {
        }
        
        ENDCG
    }
    
    Fallback "Diffuse"
}

解決手段

下記のようにZWrite Onを記述していたところを、Passで囲って下記のようにする。

Pass {
    ZWrite On
    ColorMask 0
}

コード全体

Shader "hoge/hoge"
{
    Properties
    { 
    }
    
    SubShader
    {
        Pass {
            ZWrite On
            ColorMask 0
        }

        Tags {
            "Queue" = "Transparent"
            "RenderType" = "Transparent"
        }
        
        CGPROGRAM
        
        #pragma surface surf Lambert alpha
        
        struct Input
        {
        };

        void surf (Input IN, inout SurfaceOutput o)
        {
        }
        
        ENDCG
    }
    
    Fallback "Diffuse"
}