Unity Shader实现各种进度条
1、圆形进度条shader
- Shader "ProgressBar360"
- {
- Properties
- {
- _BGTex("Background Texture",2D) = "white"{}
- // [PerRendererData]
- _MaskTex("Mask Texture", 2D) = "white" {}
- _Color("Tint", Color) = (,,,)
- _Angle("Angle", range(,)) =
- _Center("Center", vector) = (.,.,,)
- _Width("Width", float) =
- // [Toggle(CLOCK_WISE)]
- _ColorMask("Color Mask", Float) =
- _MaskDetail("Mask Detail",range(,)) = 0.3
- }
- SubShader
- {
- Tags
- {
- "Queue" = "Transparent"
- "IgnoreProjector" = "True"
- "RenderType" = "Transparent"
- "PreviewType" = "Plane"
- "CanUseSpriteAtlas" = "True"
- }
- Cull Off
- Lighting Off
- ZWrite Off
- ZTest[unity_GUIZTestMode]
- Blend SrcAlpha OneMinusSrcAlpha
- ColorMask[_ColorMask]
- Pass
- {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma shader_feature CLOCK_WISE
- #include "UnityCG.cginc"
- float _Angle;
- float4 _Center;
- half _Width;
- struct appdata_t
- {
- float4 vertex : POSITION;
- float4 color : COLOR;
- float2 texcoord : TEXCOORD0;
- };
- struct v2f
- {
- float4 vertex : SV_POSITION;
- fixed4 color : COLOR;
- half2 mask_uv : TEXCOORD0;
- half2 bg_uv :TEXCOORD1;
- };
- fixed4 _Color;
- bool _UseClipRect;
- float4 _ClipRect;
- bool _UseAlphaClip;
- fixed _MaskDetail;
- sampler2D _MaskTex;
- sampler2D _BGTex;
- float4 _MaskTex_ST;
- float4 _BGTex_ST;
- v2f vert(appdata_t IN)
- {
- v2f OUT;
- OUT.vertex = UnityObjectToClipPos(IN.vertex);
- OUT.mask_uv = TRANSFORM_TEX(IN.texcoord,_MaskTex);
- OUT.bg_uv = TRANSFORM_TEX(IN.texcoord,_BGTex);
- OUT.color = IN.color * _Color;
- return OUT;
- }
- fixed4 frag(v2f IN) : SV_Target
- {
- half4 color = tex2D(_MaskTex, IN.mask_uv)* IN.color;
- float2 pos = IN.mask_uv.xy - _Center.xy;
- float ang = degrees(atan2(pos.x, -pos.y)) + ;
- color.a = color.a * saturate((ang - _Angle) / _Width);
- half4 bgcolor = tex2D(_BGTex, IN.bg_uv) * IN.color;
- float mask_a = step(_MaskDetail,color.a);//如果color.a大于0.01,返回1,小于0.01返回0,用于代替if ,判断是否透明
- color = mask_a * color + ( - mask_a)*bgcolor;//如果透明显示背景图,如果不透明显示遮罩图
- return color;
- }
- ENDCG
- }
- }
- }
2、条形进度条shader
- // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
- Shader "UI/ProgressBar"
- {
- Properties
- {
- _BgTex("Background Texture", 2D) = "white" {}
- _ProgressTex("Progress Texture",2D) = "gray"{}
- _ProgressValue("Progress Value",Range(,))=0.3
- _Color("Tint", Color) = (,,,)
- _StencilComp("Stencil Comparison", Float) =
- _Stencil("Stencil ID", Float) =
- _StencilOp("Stencil Operation", Float) =
- _StencilWriteMask("Stencil Write Mask", Float) =
- _StencilReadMask("Stencil Read Mask", Float) =
- _ColorMask("Color Mask", Float) =
- [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) =
- }
- SubShader
- {
- Tags
- {
- "Queue" = "Transparent"
- "IgnoreProjector" = "True"
- "RenderType" = "Transparent"
- "PreviewType" = "Plane"
- "CanUseSpriteAtlas" = "True"
- }
- Stencil
- {
- Ref[_Stencil]
- Comp[_StencilComp]
- Pass[_StencilOp]
- ReadMask[_StencilReadMask]
- WriteMask[_StencilWriteMask]
- }
- Cull Off
- Lighting Off
- ZWrite Off
- ZTest[unity_GUIZTestMode]
- Blend SrcAlpha OneMinusSrcAlpha
- ColorMask[_ColorMask]
- Pass
- {
- Name "Default"
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma target 2.0
- #include "UnityCG.cginc"
- #include "UnityUI.cginc"
- #pragma multi_compile __ UNITY_UI_CLIP_RECT
- #pragma multi_compile __ UNITY_UI_ALPHACLIP
- struct appdata_t
- {
- float4 vertex : POSITION;
- float4 color : COLOR;
- float2 texcoord : TEXCOORD0;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct v2f
- {
- float4 vertex : SV_POSITION;
- fixed4 color : COLOR;
- float2 texcoord : TEXCOORD0;
- float4 worldPosition : TEXCOORD1;
- UNITY_VERTEX_OUTPUT_STEREO
- };
- fixed4 _Color;
- fixed4 _TextureSampleAdd;
- float4 _ClipRect;
- v2f vert(appdata_t v)
- {
- v2f OUT;
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
- OUT.worldPosition = v.vertex;
- OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
- OUT.texcoord = v.texcoord;
- OUT.color = v.color * _Color;
- return OUT;
- }
- sampler2D _BgTex;
- sampler2D _ProgressTex;
- half _ProgressValue;
- fixed4 frag(v2f IN) : SV_Target
- {
- half mask = step(_ProgressValue,IN.texcoord.y);//如果IN.texcoord.y大于_ProgressValue,返回1,小于0.01返回0,用于代替if ,判断是否透明
- half4 color = (tex2D(_BgTex, IN.texcoord)*mask+ tex2D(_ProgressTex, IN.texcoord)*(-mask) + _TextureSampleAdd) * IN.color;
- #ifdef UNITY_UI_CLIP_RECT
- color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
- #endif
- #ifdef UNITY_UI_ALPHACLIP
- clip(color.a - 0.001);
- #endif
- return color;
- }
- ENDCG
- }
- }
- }
3、通过修改UV坐标实现无限进度条
- // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
- Shader "UI/Default"
- {
- Properties
- {
- [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
- _ScrollX("Base layer Scroll Speed",Float) = 1.0 // 滚动速度
- _Color("Tint", Color) = (,,,)
- _StencilComp("Stencil Comparison", Float) =
- _Stencil("Stencil ID", Float) =
- _StencilOp("Stencil Operation", Float) =
- _StencilWriteMask("Stencil Write Mask", Float) =
- _StencilReadMask("Stencil Read Mask", Float) =
- _ColorMask("Color Mask", Float) =
- [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) =
- }
- SubShader
- {
- Tags
- {
- "Queue" = "Transparent"
- "IgnoreProjector" = "True"
- "RenderType" = "Transparent"
- "PreviewType" = "Plane"
- "CanUseSpriteAtlas" = "True"
- }
- Stencil
- {
- Ref[_Stencil]
- Comp[_StencilComp]
- Pass[_StencilOp]
- ReadMask[_StencilReadMask]
- WriteMask[_StencilWriteMask]
- }
- Cull Off
- Lighting Off
- ZWrite Off
- ZTest[unity_GUIZTestMode]
- Blend SrcAlpha OneMinusSrcAlpha
- ColorMask[_ColorMask]
- Pass
- {
- Name "Default"
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma target 2.0
- #include "UnityCG.cginc"
- #include "UnityUI.cginc"
- #pragma multi_compile __ UNITY_UI_CLIP_RECT
- #pragma multi_compile __ UNITY_UI_ALPHACLIP
- struct appdata_t
- {
- float4 vertex : POSITION;
- float4 color : COLOR;
- float2 texcoord : TEXCOORD0;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct v2f
- {
- float4 vertex : SV_POSITION;
- fixed4 color : COLOR;
- float2 texcoord : TEXCOORD0;
- float4 worldPosition : TEXCOORD1;
- UNITY_VERTEX_OUTPUT_STEREO
- };
- fixed4 _Color;
- fixed4 _TextureSampleAdd;
- float4 _ClipRect;
- float _ScrollX;
- v2f vert(appdata_t v)
- {
- v2f OUT;
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
- OUT.worldPosition = v.vertex;
- OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
- OUT.texcoord = v.texcoord+ frac(float2 (_ScrollX, 0.0) * _Time.y);//延X轴移动
- OUT.color = v.color * _Color;
- return OUT;
- }
- sampler2D _MainTex;
- fixed4 frag(v2f IN) : SV_Target
- {
- half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
- #ifdef UNITY_UI_CLIP_RECT
- color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
- #endif
- #ifdef UNITY_UI_ALPHACLIP
- clip(color.a - 0.001);
- #endif
- return color;
- }
- ENDCG
- }
- }
- }
注意:
1、UI sprite 一定要收尾呼应,不然就会出现上图那样断层的现象。
2、将sprite的wrap mode修改为repeat,循环显示,默认的是clamp则导致uv只播一次
Unity Shader实现各种进度条的更多相关文章
- Unity跳转场景进度条制作教程(异步加载)
Unity跳转场景进度条制作 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- unity 之 场景切换进度条显示
一.UI.建立slider适当更改即可: 二.新增loadScene脚本,用来进行场景切换,将其绑定任意物体上面.博主以放置主相机为例.参数分别为进度条(用来设置value值),显示进度文本text: ...
- Unity 异步加载 进度条
当我们进行游戏开发时,时常会进行场景切换,如果下个场景较大,切换时就会出现卡顿现象,甚至看起来像是"死机",非常影响用户体验,我们这时就可以运用异步加载,在界面上显示加载的进度条以 ...
- Unity 异步加载进度条
public class View_LoadingScene : MonoBehaviour { //场景加载进度条对象 public GameObject loadingProgressBar; / ...
- unity WWW加载进度条
using UnityEngine; using System.Collections; public class testProgress : MonoBehaviour { void Start ...
- Unity异步加载进度条
先上代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngi ...
- Unity3D中灵活绘制进度条
有时我们需要在Unity3D中绘制进度条,如: 或 如果使用4.6版本以下的unity绘制环形的进度条可能需要费点劲.我搜到的大多数方法都是用NGUI插件,但有时只是 ...
- (转)Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条(三十一)
异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Application.LoadLevel(“yourScene ...
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条
Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...
随机推荐
- sqlserver 恢复模式及避免日志爆满的方法
recovery simple 循环日志,空间自动回收,不可备份日志,恢复时仅能恢复到数据库备份时间点: 用于落地数据或测试环境或OLAP,不推荐用于生产OLTP 有时候distribution过大也 ...
- python内置的一些模块
logging模块: 默认情况下,logging将日志打印到屏幕,日志级别为WARNING:日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO & ...
- 运维派 企业面试题4&5 创建10个 用户 ; ping探测主机是否在线
Linux运维必会的实战编程笔试题(19题) 企业面试题4: 批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机8位字符串). #!/bin/bash # ;i<=; ...
- Map和WeakMap的区别
个人总结:在一个变量作用域中,如果结束到作用域结尾 } 的话,map中的引用会被垃圾回收机制回收的是weakmap ,map中的引用不会被垃圾回收机制回收的是map. 强引用:只要引用存在,垃圾回收器 ...
- luogu P3795 钟氏映射(递推)
题意 n<=107 20MB 题解 也就是给n个点,把他们一个分为一组,或两个分为一组,有多少种方法. 空间大点随便做. 我们靠递推. 一个新点,要不自己一组,要不和前面的一个点构成一组. 所以 ...
- BZOJ2870 最长道路tree(并查集+LCA)
题意 (n<=50000) 题解 #include<iostream> #include<cstring> #include<cstdio> #include ...
- PL SQL Developer使用总结
如果OS为windows 7 64位系统,Oracle版本为 Oracle 11g 64 安装PL SQL Developer 请参考 http://myskynet.blog.51cto.co ...
- mariadb 视图 事务 索引 外键
视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦 假如因为某种需求,需要将user拆房表usera和表userb,该两张表 ...
- mycat详细
MyCAT的优势基于阿里开源的Cobar产品而研发,Cobar的稳定性.可靠性.优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远.业界优 ...
- Adobe AIR and Flex - 保存序列化对象文件(译)
创建任何桌面应用程序几乎总是需要在本地存储数据,通过Adobe AIR我们有几下面几个选择,一个是我们能够使用内置的 SQLite 数据库支持,对于少量的数据这是大材小用了.另外一个选择是我们通过把数 ...