Files
JJBB/Assets/Project/Shader/SkillRange.shader
2024-08-23 15:49:34 +08:00

149 lines
2.9 KiB
Plaintext

Shader "Zhanyou/SkillRange" {
Properties
{
_ShadowTex("Cookie", 2D) = "gray" {}
_RangeRadiu("Radiu",Range(0,0.5)) = 0.2
_RangeAngle("Angle",Range(0,180)) = 60
_LineW1("LineW",Range(0,0.5)) = 0.1
_LineW2("LineW",Range(0,0.1)) = 0.01
_LineColor("LineColor",Color) = (1,0,0,1)
_Forword("Forword",Vector) = (0,0,0,0)
[Toggle(CLIP_BY_RANGE)] _Redify("Clip By Range", Int) = 0
}
//Properties{
// _ShadowTex("Cookie", 2D) = "gray" {}
// _RangeRadiu("Radiu",Range(0,0.5)) = 0.2
// _RangeAngle("Angle",Range(0,180)) = 60
// _LineW1("LineW",Range(0,0.5)) = 0.1
// _LineW2("LineW",Range(0,0.1)) = 0.01
// _LineColor("LineColor",Color) = (1,0,0,1)
// _Forword("Forword",Vector) = (0,0,0,0)
// _Type("Type",Int) = 1
//}
Subshader{
Tags{ "Queue" = "Transparent-1" }
ZWrite Off
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGINCLUDE
#pragma vertex vert
#pragma multi_compile __ CLIP_BY_RANGE
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f {
float2 uvShadow : TEXCOORD0;
float4 pos : SV_POSITION;
};
struct a2v {
float4 vertex:POSITION;
float4 texcoord:TEXCOORD0;
};
v2f vert(a2v v)
{
v2f o;
UNITY_INITIALIZE_OUTPUT(v2f, o);
o.pos = UnityObjectToClipPos(v.vertex);
o.uvShadow = v.texcoord.xy;
return o;
}
sampler2D _ShadowTex;
float _RangeRadiu;
float _RangeAngle;
float _LineW1;
float _LineW2;
float4 _LineColor;
float4 _Forword;
fixed4 frag(v2f i) : SV_Target
{
fixed4 res = tex2D(_ShadowTex, i.uvShadow);
#if CLIP_BY_RANGE
float2 center = float2(0.5, 0.5);
float dis = distance(i.uvShadow, center);
float2 dir = float2(i.uvShadow.x - 0.5,i.uvShadow.y - 0.5);
float2 centerDir = float2(_Forword .x-0.5, _Forword .y-0.5);
float angle = dot(dir, centerDir)/(length(dir)*length(centerDir));
float angleMax = cos(radians(_RangeAngle));
if (dis < _RangeRadiu)
{
res = fixed4(0, 0, 0, 0);
}
else
{
if (dis >= _RangeRadiu && dis < _RangeRadiu + _LineW1)
{
if (angle > angleMax)
{
res = _LineColor;
}
else
{
res = fixed4(0, 0, 0, 0);
}
}
else
{
if (dis >= _RangeRadiu + _LineW1 && dis < 0.5- _LineW1)
{
if (angle > angleMax && angle < angleMax+ _LineW2)
{
res = _LineColor;
}
else
{
if(angle <= angleMax)
res = fixed4(0, 0, 0, 0);
}
}
else
{
if (dis >= 0.5- _LineW1 && dis <0.5)
{
if (angle > angleMax)
{
res = _LineColor;
}
else
{
res = fixed4(0, 0, 0, 0);
}
}
}
}
}
#endif
return res;
}
ENDCG
Pass
{
Stencil
{
Ref 1
Comp Equal
}
CGPROGRAM
ENDCG
}
Pass
{
Stencil
{
Ref 1
Comp NotEqual
}
ZTest Always
CGPROGRAM
ENDCG
}
}
}