1、圆形进度条shader

  1. Shader "ProgressBar360"
  2. {
  3. Properties
  4. {
  5. _BGTex("Background Texture",2D) = "white"{}
  6. // [PerRendererData]
  7. _MaskTex("Mask Texture", 2D) = "white" {}
  8. _Color("Tint", Color) = (,,,)
  9. _Angle("Angle", range(,)) =
  10. _Center("Center", vector) = (.,.,,)
  11. _Width("Width", float) =
  12.  
  13. // [Toggle(CLOCK_WISE)]
  14.  
  15. _ColorMask("Color Mask", Float) =
  16.  
  17. _MaskDetail("Mask Detail",range(,)) = 0.3
  18. }
  19.  
  20. SubShader
  21. {
  22. Tags
  23. {
  24. "Queue" = "Transparent"
  25. "IgnoreProjector" = "True"
  26. "RenderType" = "Transparent"
  27. "PreviewType" = "Plane"
  28. "CanUseSpriteAtlas" = "True"
  29. }
  30.  
  31. Cull Off
  32. Lighting Off
  33. ZWrite Off
  34. ZTest[unity_GUIZTestMode]
  35. Blend SrcAlpha OneMinusSrcAlpha
  36. ColorMask[_ColorMask]
  37.  
  38. Pass
  39. {
  40. CGPROGRAM
  41. #pragma vertex vert
  42. #pragma fragment frag
  43. #pragma shader_feature CLOCK_WISE
  44.  
  45. #include "UnityCG.cginc"
  46.  
  47. float _Angle;
  48. float4 _Center;
  49.  
  50. half _Width;
  51.  
  52. struct appdata_t
  53. {
  54. float4 vertex : POSITION;
  55. float4 color : COLOR;
  56. float2 texcoord : TEXCOORD0;
  57. };
  58.  
  59. struct v2f
  60. {
  61. float4 vertex : SV_POSITION;
  62. fixed4 color : COLOR;
  63. half2 mask_uv : TEXCOORD0;
  64. half2 bg_uv :TEXCOORD1;
  65. };
  66.  
  67. fixed4 _Color;
  68.  
  69. bool _UseClipRect;
  70. float4 _ClipRect;
  71.  
  72. bool _UseAlphaClip;
  73.  
  74. fixed _MaskDetail;
  75.  
  76. sampler2D _MaskTex;
  77. sampler2D _BGTex;
  78.  
  79. float4 _MaskTex_ST;
  80. float4 _BGTex_ST;
  81.  
  82. v2f vert(appdata_t IN)
  83. {
  84. v2f OUT;
  85. OUT.vertex = UnityObjectToClipPos(IN.vertex);
  86.  
  87. OUT.mask_uv = TRANSFORM_TEX(IN.texcoord,_MaskTex);
  88. OUT.bg_uv = TRANSFORM_TEX(IN.texcoord,_BGTex);
  89.  
  90. OUT.color = IN.color * _Color;
  91. return OUT;
  92. }
  93.  
  94. fixed4 frag(v2f IN) : SV_Target
  95. {
  96. half4 color = tex2D(_MaskTex, IN.mask_uv)* IN.color;
  97. float2 pos = IN.mask_uv.xy - _Center.xy;
  98.  
  99. float ang = degrees(atan2(pos.x, -pos.y)) + ;
  100. color.a = color.a * saturate((ang - _Angle) / _Width);
  101.  
  102. half4 bgcolor = tex2D(_BGTex, IN.bg_uv) * IN.color;
  103. float mask_a = step(_MaskDetail,color.a);//如果color.a大于0.01,返回1,小于0.01返回0,用于代替if ,判断是否透明
  104. color = mask_a * color + ( - mask_a)*bgcolor;//如果透明显示背景图,如果不透明显示遮罩图
  105.  
  106. return color;
  107. }
  108. ENDCG
  109. }
  110. }
  111. }

2、条形进度条shader

  1. // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
  2.  
  3. Shader "UI/ProgressBar"
  4. {
  5. Properties
  6. {
  7. _BgTex("Background Texture", 2D) = "white" {}
  8. _ProgressTex("Progress Texture",2D) = "gray"{}
  9.  
  10. _ProgressValue("Progress Value",Range(,))=0.3
  11.  
  12. _Color("Tint", Color) = (,,,)
  13.  
  14. _StencilComp("Stencil Comparison", Float) =
  15. _Stencil("Stencil ID", Float) =
  16. _StencilOp("Stencil Operation", Float) =
  17. _StencilWriteMask("Stencil Write Mask", Float) =
  18. _StencilReadMask("Stencil Read Mask", Float) =
  19.  
  20. _ColorMask("Color Mask", Float) =
  21.  
  22. [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) =
  23. }
  24.  
  25. SubShader
  26. {
  27. Tags
  28. {
  29. "Queue" = "Transparent"
  30. "IgnoreProjector" = "True"
  31. "RenderType" = "Transparent"
  32. "PreviewType" = "Plane"
  33. "CanUseSpriteAtlas" = "True"
  34. }
  35.  
  36. Stencil
  37. {
  38. Ref[_Stencil]
  39. Comp[_StencilComp]
  40. Pass[_StencilOp]
  41. ReadMask[_StencilReadMask]
  42. WriteMask[_StencilWriteMask]
  43. }
  44.  
  45. Cull Off
  46. Lighting Off
  47. ZWrite Off
  48. ZTest[unity_GUIZTestMode]
  49. Blend SrcAlpha OneMinusSrcAlpha
  50. ColorMask[_ColorMask]
  51.  
  52. Pass
  53. {
  54. Name "Default"
  55. CGPROGRAM
  56. #pragma vertex vert
  57. #pragma fragment frag
  58. #pragma target 2.0
  59.  
  60. #include "UnityCG.cginc"
  61. #include "UnityUI.cginc"
  62.  
  63. #pragma multi_compile __ UNITY_UI_CLIP_RECT
  64. #pragma multi_compile __ UNITY_UI_ALPHACLIP
  65.  
  66. struct appdata_t
  67. {
  68. float4 vertex : POSITION;
  69. float4 color : COLOR;
  70. float2 texcoord : TEXCOORD0;
  71. UNITY_VERTEX_INPUT_INSTANCE_ID
  72. };
  73.  
  74. struct v2f
  75. {
  76. float4 vertex : SV_POSITION;
  77. fixed4 color : COLOR;
  78. float2 texcoord : TEXCOORD0;
  79. float4 worldPosition : TEXCOORD1;
  80. UNITY_VERTEX_OUTPUT_STEREO
  81. };
  82.  
  83. fixed4 _Color;
  84. fixed4 _TextureSampleAdd;
  85. float4 _ClipRect;
  86.  
  87. v2f vert(appdata_t v)
  88. {
  89. v2f OUT;
  90. UNITY_SETUP_INSTANCE_ID(v);
  91. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
  92. OUT.worldPosition = v.vertex;
  93. OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
  94.  
  95. OUT.texcoord = v.texcoord;
  96.  
  97. OUT.color = v.color * _Color;
  98. return OUT;
  99. }
  100.  
  101. sampler2D _BgTex;
  102. sampler2D _ProgressTex;
  103. half _ProgressValue;
  104.  
  105. fixed4 frag(v2f IN) : SV_Target
  106. {
  107. half mask = step(_ProgressValue,IN.texcoord.y);//如果IN.texcoord.y大于_ProgressValue,返回1,小于0.01返回0,用于代替if ,判断是否透明
  108.  
  109. half4 color = (tex2D(_BgTex, IN.texcoord)*mask+ tex2D(_ProgressTex, IN.texcoord)*(-mask) + _TextureSampleAdd) * IN.color;
  110.  
  111. #ifdef UNITY_UI_CLIP_RECT
  112. color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
  113. #endif
  114.  
  115. #ifdef UNITY_UI_ALPHACLIP
  116. clip(color.a - 0.001);
  117. #endif
  118.  
  119. return color;
  120. }
  121. ENDCG
  122. }
  123. }
  124. }

3、通过修改UV坐标实现无限进度条

  1. // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
  2.  
  3. Shader "UI/Default"
  4. {
  5. Properties
  6. {
  7. [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
  8.  
  9. _ScrollX("Base layer Scroll Speed",Float) = 1.0 // 滚动速度
  10.  
  11. _Color("Tint", Color) = (,,,)
  12.  
  13. _StencilComp("Stencil Comparison", Float) =
  14. _Stencil("Stencil ID", Float) =
  15. _StencilOp("Stencil Operation", Float) =
  16. _StencilWriteMask("Stencil Write Mask", Float) =
  17. _StencilReadMask("Stencil Read Mask", Float) =
  18.  
  19. _ColorMask("Color Mask", Float) =
  20.  
  21. [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) =
  22. }
  23.  
  24. SubShader
  25. {
  26. Tags
  27. {
  28. "Queue" = "Transparent"
  29. "IgnoreProjector" = "True"
  30. "RenderType" = "Transparent"
  31. "PreviewType" = "Plane"
  32. "CanUseSpriteAtlas" = "True"
  33. }
  34.  
  35. Stencil
  36. {
  37. Ref[_Stencil]
  38. Comp[_StencilComp]
  39. Pass[_StencilOp]
  40. ReadMask[_StencilReadMask]
  41. WriteMask[_StencilWriteMask]
  42. }
  43.  
  44. Cull Off
  45. Lighting Off
  46. ZWrite Off
  47. ZTest[unity_GUIZTestMode]
  48. Blend SrcAlpha OneMinusSrcAlpha
  49. ColorMask[_ColorMask]
  50.  
  51. Pass
  52. {
  53. Name "Default"
  54. CGPROGRAM
  55. #pragma vertex vert
  56. #pragma fragment frag
  57. #pragma target 2.0
  58.  
  59. #include "UnityCG.cginc"
  60. #include "UnityUI.cginc"
  61.  
  62. #pragma multi_compile __ UNITY_UI_CLIP_RECT
  63. #pragma multi_compile __ UNITY_UI_ALPHACLIP
  64.  
  65. struct appdata_t
  66. {
  67. float4 vertex : POSITION;
  68. float4 color : COLOR;
  69. float2 texcoord : TEXCOORD0;
  70. UNITY_VERTEX_INPUT_INSTANCE_ID
  71. };
  72.  
  73. struct v2f
  74. {
  75. float4 vertex : SV_POSITION;
  76. fixed4 color : COLOR;
  77. float2 texcoord : TEXCOORD0;
  78. float4 worldPosition : TEXCOORD1;
  79. UNITY_VERTEX_OUTPUT_STEREO
  80. };
  81.  
  82. fixed4 _Color;
  83. fixed4 _TextureSampleAdd;
  84. float4 _ClipRect;
  85.  
  86. float _ScrollX;
  87.  
  88. v2f vert(appdata_t v)
  89. {
  90. v2f OUT;
  91. UNITY_SETUP_INSTANCE_ID(v);
  92. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
  93. OUT.worldPosition = v.vertex;
  94. OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
  95.  
  96. OUT.texcoord = v.texcoord+ frac(float2 (_ScrollX, 0.0) * _Time.y);//延X轴移动
  97.  
  98. OUT.color = v.color * _Color;
  99. return OUT;
  100. }
  101.  
  102. sampler2D _MainTex;
  103.  
  104. fixed4 frag(v2f IN) : SV_Target
  105. {
  106. half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
  107.  
  108. #ifdef UNITY_UI_CLIP_RECT
  109. color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
  110. #endif
  111.  
  112. #ifdef UNITY_UI_ALPHACLIP
  113. clip(color.a - 0.001);
  114. #endif
  115.  
  116. return color;
  117. }
  118. ENDCG
  119. }
  120. }
  121. }

注意:

1、UI sprite 一定要收尾呼应,不然就会出现上图那样断层的现象。

2、将sprite的wrap mode修改为repeat,循环显示,默认的是clamp则导致uv只播一次

Unity Shader实现各种进度条的更多相关文章

  1. Unity跳转场景进度条制作教程(异步加载)

    Unity跳转场景进度条制作 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  2. unity 之 场景切换进度条显示

    一.UI.建立slider适当更改即可: 二.新增loadScene脚本,用来进行场景切换,将其绑定任意物体上面.博主以放置主相机为例.参数分别为进度条(用来设置value值),显示进度文本text: ...

  3. Unity 异步加载 进度条

    当我们进行游戏开发时,时常会进行场景切换,如果下个场景较大,切换时就会出现卡顿现象,甚至看起来像是"死机",非常影响用户体验,我们这时就可以运用异步加载,在界面上显示加载的进度条以 ...

  4. Unity 异步加载进度条

    public class View_LoadingScene : MonoBehaviour { //场景加载进度条对象 public GameObject loadingProgressBar; / ...

  5. unity WWW加载进度条

    using UnityEngine; using System.Collections; public class testProgress : MonoBehaviour { void Start ...

  6. Unity异步加载进度条

    先上代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngi ...

  7. Unity3D中灵活绘制进度条

    有时我们需要在Unity3D中绘制进度条,如:           或        如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...

  8. (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)

      异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene ...

  9. Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条

    Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...

随机推荐

  1. sqlserver 恢复模式及避免日志爆满的方法

    recovery simple 循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点: 用于落地数据或测试环境或OLAP,不推荐用于生产OLTP 有时候distribution过大也 ...

  2. python内置的一些模块

    logging模块: 默认情况下,logging将日志打印到屏幕,日志级别为WARNING:日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO & ...

  3. 运维派 企业面试题4&5 创建10个 用户 ; ping探测主机是否在线

    Linux运维必会的实战编程笔试题(19题) 企业面试题4: 批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串). #!/bin/bash # ;i<=; ...

  4. Map和WeakMap的区别

    个人总结:在一个变量作用域中,如果结束到作用域结尾 } 的话,map中的引用会被垃圾回收机制回收的是weakmap ,map中的引用不会被垃圾回收机制回收的是map. 强引用:只要引用存在,垃圾回收器 ...

  5. luogu P3795 钟氏映射(递推)

    题意 n<=107 20MB 题解 也就是给n个点,把他们一个分为一组,或两个分为一组,有多少种方法. 空间大点随便做. 我们靠递推. 一个新点,要不自己一组,要不和前面的一个点构成一组. 所以 ...

  6. BZOJ2870 最长道路tree(并查集+LCA)

    题意 (n<=50000) 题解 #include<iostream> #include<cstring> #include<cstdio> #include ...

  7. PL SQL Developer使用总结

    如果OS为windows 7 64位系统,Oracle版本为 Oracle 11g 64 安装PL SQL Developer 请参考    http://myskynet.blog.51cto.co ...

  8. mariadb 视图 事务 索引 外键

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦   假如因为某种需求,需要将user拆房表usera和表userb,该两张表 ...

  9. mycat详细

    MyCAT的优势基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远.业界优 ...

  10. Adobe AIR and Flex - 保存序列化对象文件(译)

    创建任何桌面应用程序几乎总是需要在本地存储数据,通过Adobe AIR我们有几下面几个选择,一个是我们能够使用内置的 SQLite 数据库支持,对于少量的数据这是大材小用了.另外一个选择是我们通过把数 ...