【Unity】SpriteRender实现环形进度条效果

前言

由于项目限制,只能用SpriteRender来实现环形进度条的效果。所以只能另想他法

代码


Shader "My/SpriteCircleFill"
{
	Properties
	{
	 [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
	 _Color("Tint", Color) = (1,1,1,1)
	 [MaterialToggle] PixelSnap("Pixel snap", Float) = 0
	 _Fill("Fill",Range(0,1)) = 0
	}

		SubShader
	 {
		 Tags
		 {
			 "Queue" = "Transparent"
			 "IgnoreProjector" = "True"
			 "RenderType" = "Transparent"
			 "PreviewType" = "Plane"
			 "CanUseSpriteAtlas" = "True"
		 }

		 Cull Off
		 Lighting Off
		 ZWrite Off
		 Fog {Mode Off}
		 Blend SrcAlpha OneMinusSrcAlpha

		 Pass{
		 CGPROGRAM
		 #pragma vertex vert		 
		 #pragma fragment frag	
		 #pragma multi_compile DUMMY PIXELSNAP_ON
		  #include "UnitySprites.cginc"

	   float _Fill;


	   v2f vert(appdata_t IN)
	   {
		   v2f OUT;
		   OUT.vertex = UnityObjectToClipPos(IN.vertex);
		   OUT.texcoord = IN.texcoord;
		   OUT.color = IN.color*_Color;
		   #ifdef PIXELSNAP_ON
		   OUT.vertex = UnityPixelSnap(OUT.vertex);
		   #endif
		   return OUT;
	   }


	   fixed4 frag(v2f IN) :COLOR
	   {
		   fixed4 result = tex2D(_MainTex,IN.texcoord)*IN.color;
		   fixed2 p = fixed2(IN.texcoord.x - 0.5,IN.texcoord.y - 0.5);

		   if (_Fill < 0.5)
		   {
			   float compare = (_Fill * 2 - 0.5)*3.1415926;
			   float theta = atan(p.y / p.x);
			   if (theta > compare)
			   {
				   result.a = 0;
			   }
			   if (p.x > 0)
			   {
			   result.a = 0;
			   }
		   }
		   else
		   {
			   float compare = ((_Fill - 0.5) * 2 - 0.5)*3.1415926;
			   float theta = atan(p.y / p.x);
			   if (p.x > 0)
			   {
				   if (theta > compare)
				   {
				   result.a = 0;
				   }
			   }
		   }
		   return result;
	   }
	   ENDCG
	   }
	 }
		 Fallback "Transparent/VertexLit"
}

使用方法

1.创建上面代码中的Shader
2.create – Material —将默认的Shader替换成上面的shader
3.将这个Material赋值给要使用这个shader进度条的SpriteRenderer
4.程序里取到这个spriteRender:
SpriteRenderer sp_render;
sp_render.material.SetFloat(“_Fill”, (float)进度条的值); //此处注意需要设置的变量名称

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值