Shader "Erika/Common/Image/Blur" { Properties { _MainTex("Texture", 2D) = "white" {} _Angle("Angle", float) = 0 _Distance("Distance", float) = 0 } SubShader { Tags { "RenderType" = "Opaque" "Queue" = "Transparent-1"} LOD 100 ZWrite Off ZTest LEqual Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; float _Angle; float4 _TileOffset; // 角色的范围 fixed _Distance; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag(v2f i) : SV_Target { _Angle = 0; _Distance = 0; fixed2 uv = i.uv; fixed2 offset = fixed2(0.05, 0.05); const float sampleCount = 30; fixed4 color = fixed4(0,0,0,0); float radian = radians(_Angle); float distance = _Distance; for (int i = 0; i < sampleCount; i++) { float dx = distance * cos(radian) / sampleCount * i; float dy = distance * sin(radian) / sampleCount * i; color += tex2D(_MainTex,float2(uv.x + dx,uv.y + dy)) * (1 / sampleCount); } //color = tex2D(_MainTex, uv); if(uv.x > _TileOffset.z && uv.x < _TileOffset.x + _TileOffset.z && uv.y > _TileOffset.w && uv.y < _TileOffset.w + _TileOffset.y) { color = fixed4(1,0,0,0); } return color; } ENDCG } } } // shader