Unity:自定义着色器不遵循alpha(透明度)

问题描述 投票:0回答:1

这是Unity中的自定义着色器,它是3色渐变着色器:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "CustomShaders/ThreeColorsGradientShader" {
     Properties {
         [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
         _ColorTop ("Top Color", Color) = (1,1,1,1)
         _ColorMid ("Mid Color", Color) = (1,1,1,1)
         _ColorBot ("Bot Color", Color) = (1,1,1,1)
         _Middle ("Middle", Range(0.001, 0.999)) = 1

     }

     SubShader {
         Tags {"Queue"="Transparent"  "IgnoreProjector"="True"  "RenderType"="Transparent"}
         LOD 200

         ZWrite Off

         Pass {
         CGPROGRAM
         #pragma vertex vert  
         #pragma fragment frag
         #include "UnityCG.cginc"

         fixed4 _ColorTop;
         fixed4 _ColorMid;
         fixed4 _ColorBot;
         float  _Middle;

         struct v2f {
             float4 pos : SV_POSITION;
             float4 texcoord : TEXCOORD0;
         };

         v2f vert (appdata_full v) {
             v2f o;
             o.pos = UnityObjectToClipPos (v.vertex);
             o.texcoord = v.texcoord;
             return o;
         }

         fixed4 frag (v2f i) : COLOR {
             fixed4 c = lerp(_ColorBot, _ColorMid, i.texcoord.y / _Middle) * step(i.texcoord.y, _Middle);
             c += lerp(_ColorMid, _ColorTop, (i.texcoord.y - _Middle) / (1 - _Middle)) * (1 - step(i.texcoord.y, _Middle));
             //c.a = 1;
             return c;
         }
         ENDCG
         }
     }
 }

在将其分配给材质并在UIButton上使用了材质之后,它可以按预期工作,但是如果我想更改材质的颜色(即使其透明),则它不会响应这些更改。代码中缺少什么?

这是Unity中的自定义着色器,它是3色渐变着色器://升级注意:将'mul(UNITY_MATRIX_MVP,*)'替换为'UnityObjectToClipPos(*)'着色器“ CustomShaders / ...

c# unity3d shader
1个回答
0
投票
Tags {"Queue"="Transparent" "RenderType"="Transparent"} LOD 200 ZWrite Off Blend SrcAlpha OneMinusSrcAlpha //add this Pass {
然后,请确保碎片着色器中的c.a在0到1之间,以获得透明的alpha。旁注,我认为您不需要忽略标签中的投影仪。
© www.soinside.com 2019 - 2024. All rights reserved.