这是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 / ...
Tags {"Queue"="Transparent" "RenderType"="Transparent"}
LOD 200
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha //add this
Pass {
然后,请确保碎片着色器中的c.a在0到1之间,以获得透明的alpha。旁注,我认为您不需要忽略标签中的投影仪。