| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | Shader "Custom/ParticleUnlitLocalYGradient"{    Properties    {        _Color1 ("Color 1", Color) = (1, 1, 1, 1)        _Color2 ("Color 2", Color) = (0, 0, 0, 1)        _GradientRange ("Gradient Range", Vector) = (0, 1, 0, 0)    }    SubShader    {        Tags { "Queue" = "Overlay" }        Pass        {            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #pragma exclude_renderers gles xbox360 ps3            struct appdata_t            {                float4 vertex : POSITION;                float4 color : COLOR;            };            struct v2f            {                float4 pos : POSITION;                float4 color : COLOR;                float localY : TEXCOORD0;            };            float4 _Color1;            float4 _Color2;            float4 _GradientRange; // xy 是范围的最小值和最大值            v2f vert (appdata_t v)            {                v2f o;                o.pos = UnityObjectToClipPos(v.vertex);                o.color = v.color;                                // 将模型空间的 Y 坐标传递到片段着色器                o.localY = v.vertex.y;                return o;            }            fixed4 frag (v2f i) : SV_Target            {                // 计算渐变的值                float gradient = (i.localY - _GradientRange.x) / (_GradientRange.y - _GradientRange.x);                gradient = clamp(gradient, 0.0, 1.0); // 确保渐变值在 0 到 1 之间                // 线性插值两种颜色                fixed4 interpolatedColor = lerp(_Color1, _Color2, gradient);                return interpolatedColor * i.color;            }            ENDCG        }    }    FallBack "Diffuse"}
 |