Timer.shader 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. Shader "DashGame/Timer"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Texture", 2D) = "white" {}
  6. [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
  7. }
  8. SubShader
  9. {
  10. Tags
  11. {
  12. "Queue" = "Transparent"
  13. "RenderType" = "Transparent"
  14. "PreviewType" = "Plane"
  15. "IgnoreProjector" = "True"
  16. "CanUseSpriteAtlas" = "True"
  17. }
  18. Lighting Off
  19. Blend SrcAlpha OneMinusSrcAlpha
  20. Pass
  21. {
  22. CGPROGRAM
  23. #pragma vertex vert
  24. #pragma fragment frag
  25. #include "UnityUI.cginc"
  26. #include "UnityCG.cginc"
  27. struct appdata
  28. {
  29. float2 uv : TEXCOORD0;
  30. float4 color : COLOR;
  31. float4 vertex : POSITION;
  32. };
  33. struct v2f
  34. {
  35. float2 uv : TEXCOORD0;
  36. float4 color : COLOR;
  37. float4 vertex : SV_POSITION;
  38. };
  39. float _Fill;
  40. float4 _MainTex_ST;
  41. sampler2D _MainTex;
  42. v2f vert (appdata v)
  43. {
  44. v2f o;
  45. o.uv = TRANSFORM_TEX(v.uv, _MainTex);
  46. o.color = v.color;
  47. o.vertex = UnityObjectToClipPos(v.vertex);
  48. return o;
  49. }
  50. fixed4 frag (v2f i) : SV_Target
  51. {
  52. fixed4 col = tex2D(_MainTex, i.uv);
  53. col.a *= i.color.a;
  54. float angleF;
  55. float angleR;
  56. if(_Fill>=1)
  57. {
  58. col.a=0;
  59. }
  60. else
  61. {
  62. if(i.uv.x <= 0.5 && i.uv.y >= 0.5)
  63. {
  64. float x = 0.5-i.uv.x;
  65. float y = i.uv.y - 0.5;
  66. angleR = degrees(atan(x/y));
  67. }
  68. else if(i.uv.x <= 0.5 && i.uv.y <= 0.5)
  69. {
  70. float x = 0.5-i.uv.x;
  71. float y = 0.5-i.uv.y;
  72. angleR = 90 + degrees(atan(y/x));
  73. }
  74. else if(i.uv.x >= 0.5 && i.uv.y <= 0.5)
  75. {
  76. float x = i.uv.x-0.5;
  77. float y = 0.5-i.uv.y;
  78. angleR = 180 + degrees(atan(x/y));
  79. }
  80. else if(i.uv.x >= 0.5 && i.uv.y >= 0.5)
  81. {
  82. float x = i.uv.x-0.5;
  83. float y = i.uv.y-0.5;
  84. angleR = 270 + degrees(atan(y/x));
  85. }
  86. angleF = 360*_Fill;
  87. float angleOffset = angleF - angleR;
  88. if(angleOffset > 45)
  89. {
  90. col.a*=1-(angleOffset-45)/45;
  91. }
  92. else if (angleOffset < 0)
  93. {
  94. col.a = 0;
  95. }
  96. }
  97. return col;
  98. }
  99. ENDCG
  100. }
  101. }
  102. }