Unity 2D - 停用 A 值的添加

Unity 2D - deactivate addition of A values

如何在 Unity 中禁用添加 A 值 (ARGB)?我有一个来自多个部分的 fugurine。当部分重叠时,会像图片一样添加不透明度。谢谢

我找到了 kida 做的着色器:

Shader "Custom/FlatTransparent" {
    Properties {
        _Color("Main Color", Color) = (1,1,1,1)
        _MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
    }

    SubShader {
        Tags{ "Queue" = "Transparent" "IgnoreProjector" = "False" "RenderType" = "Transparent" }

        Pass {
            ColorMask A
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            fixed4 _Color;

            float4 vert(float4 vertex : POSITION) : SV_POSITION {
                return UnityObjectToClipPos(vertex);
            }

            fixed4 frag() : SV_Target {
                return _Color;
            }
            ENDCG
        }

        Pass {
            ColorMask RGB
            Blend SrcAlpha OneMinusSrcAlpha

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            sampler2D _MainTex;
            fixed4 _Color;

            struct appdata {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            v2f vert(appdata v) {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            fixed4 frag(v2f i) : SV_Target{
                fixed4 col = _Color * tex2D(_MainTex, i.uv);
                return col;
            }
            ENDCG
        }
    }

    Fallback "Diffuse"
}

要正常工作,需要满足三个条件:

  • 使用此着色器
  • ,精灵必须将其 Material 设置为 Material
  • 精灵需要在不同的 z 坐标中
  • 并且 alpha 是在着色器中设置的,而不是在 sprite 中,所以每个 sprite 都有相同的 alpha

我不太擅长着色器,所以我想不出如何不使用这两个最后的限制。如果有人可以改进它,请分享。

来源:Transparent Solid Color Shader, ShaderLab: Blending