最终效果
Shader源码
Shader "QQ/DestroyFlow" {
Properties{
_Color("Color", Color) = (1,1,1,1)
_MainTex("Albedo (RGB)", 2D) = "white" {}
_EdgeColor("EdgeColor",Color) = (1,1,1,1)
_Edge("EdgeRange",Range(0,1)) = 0
_Angle("angle",Range(0,360)) = 0
}
SubShader{
Pass
{
Tags{
"RenderType" = "Opaque"
}
LOD 200
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
#include "UnityCG.cginc"
#pragma multi_compile_fog
fixed4 _Color;
fixed4 _EdgeColor;
fixed4 _MainTex_ST;
sampler2D _MainTex;
float _Edge;
float _Angle;
struct a2v {
float4 vertex:POSITION;
float3 normal:NORMAL;
float4 texcoord:TEXCOORD0;
};
struct v2f {
float4 pos: SV_POSITION;
UNITY_FOG_COORDS(0)
float2 uv: TEXCOORD1;
};
v2f vert(a2v v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
_MainTex_ST.zw *= _Time.x;//利用Unity内置的属性来做偏移
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
_Angle *= 0.01745f;//将旋转角度转换为度数
float _sin = sin(_Angle);
float _cos = cos(_Angle);
o.uv = mul(o.uv,float2x2(_cos,-_sin,_sin,_cos));//还记得之前说的旋转矩阵吗
UNITY_TRANSFER_FOG(o, o.pos);
return o;
}
fixed4 frag(v2f i) :COLOR
{
fixed4 col = tex2D(_MainTex, i.uv);
col.a -= _Edge;
clip(col.a);//负数的值将被裁切
col*=lerp(_Color,_EdgeColor,max(0,(_EdgeColor.a- col.a ))/ col.a);//选择叠加的颜色
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}