PointerProgressShader.shader 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. Shader "FFALCON/PointerProgressShader"
  2. {
  3. Properties
  4. {
  5. _Color("Color", Color) = (1, 1, 1, 1)
  6. _InnerDiameter("InnerDiameter", Range(0, 50.0)) = 1.5
  7. _OuterDiameter("OuterDiameter", Range(0.00872665, 100.0)) = 2.0
  8. _DistanceInMeters("DistanceInMeters", Range(0.0, 10000.0)) = 2.0
  9. _Progress("Progress", Range(0,360)) = 2.0
  10. _Center("Center", vector) = (0,0,0)
  11. }
  12. SubShader
  13. {
  14. Tags { "Queue" = "Overlay" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
  15. Pass
  16. {
  17. Blend SrcAlpha OneMinusSrcAlpha, OneMinusDstAlpha One
  18. AlphaTest Off
  19. Cull Back
  20. Lighting Off
  21. ZWrite Off
  22. ZTest Always
  23. Fog { Mode Off }
  24. CGPROGRAM
  25. #pragma vertex vert
  26. #pragma fragment frag
  27. #include "UnityCG.cginc"
  28. uniform float4 _Color;
  29. uniform float _InnerDiameter;
  30. uniform float _OuterDiameter;
  31. uniform float _DistanceInMeters;
  32. float4 _Center;
  33. float _Progress;
  34. struct vertexInput
  35. {
  36. float4 vertex : POSITION;
  37. };
  38. struct fragmentInput
  39. {
  40. float4 position : SV_POSITION;
  41. };
  42. fragmentInput vert(vertexInput i)
  43. {
  44. float scale = lerp(_OuterDiameter, _InnerDiameter, i.vertex.z);
  45. float3 vert_out = float3(i.vertex.x * scale, i.vertex.y * scale , _DistanceInMeters);
  46. fragmentInput o;
  47. o.position = UnityObjectToClipPos(vert_out);
  48. return o;
  49. }
  50. fixed4 frag(fragmentInput i) : SV_Target
  51. {
  52. float2 pos = i.position - _Center;
  53. float angle = degrees(atan2(pos.y, pos.x));
  54. _Progress -= 180;
  55. float d = 1 - step(_Progress, angle);
  56. fixed4 color = _Color;
  57. color.a = d;
  58. return color;
  59. }
  60. ENDCG
  61. }
  62. }
  63. }