首页 > 其他 > 详细

技能CD 效果

时间:2015-11-23 13:10:54      阅读:210      评论:0      收藏:0      [点我收藏+]

技术分享

 

技能CD特效 

  这个效果主要是利用反正切函数完成。atan2(x,y)的返回值是[-PI,PI],这个支持4个象限的反正切函数。关于圆角计算,在上篇文章中有介绍。

  技术分享

  现在,我们来看看反正切函数的效果:

  技术分享

  在第一象限:返回[0,PI/2],有渐变;  

  在第二象限:返回[PI/2,PI],为白色;

  在第三象限:返回[-PI,-PI/2],为黑色;

  在第四象限:返回[-PI/2,0],为黑色;

  

                uv = i.uv - fixed2(0.5,0.5);  
                float hui = atan2(uv.y, uv.x);
                return float4(hui,hui,hui,alpha);

 

  反正切的返回值在[-PI,PI],那么我们现在增加变量_angle,让他控制反正切的值;我们设置_angle值为[-PI,PI],用_angle的值,加上反正切的值,他们最后的值就会随着_angle的值变化。

    当_angle = -PI时,最终值为[-2PI,0],显示黑色;

    当_angle = PI时,最终值为[0,2PI],显示渐变;

    技术分享

  现在我使用用sign函数,将大于0的部分全部设置为1,小于等于0的部分设置成为0;

    技术分享

 

源代码:

Shader "JQM/Test02"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _angle("angle", Range(0, 1)) = 0  
    }
    SubShader
    {

        Pass
        {
            Tags {"Queue" = "Transparent"}       
            ZWrite Off       
            Blend SrcAlpha OneMinusSrcAlpha    

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            
            #include "UnityCG.cginc"

            float _percent;  
            float _angle;  

            sampler2D _MainTex;
            float4 _MainTex_ST;

            struct VertexOutPut
            {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
            };
            
            VertexOutPut vert (appdata_full v)
            {
                VertexOutPut o;
                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);    
                o.uv = v.texcoord.xy;  

                return o;
            }
            
            fixed4 frag (VertexOutPut i) : COLOR
            {
                //圆角计算
                float2 uv = i.uv.xy - float2(0.5,0.5);     
                float rx = fmod(uv.x, 0.4);                      float ry = fmod(uv.y, 0.4);                      float mx = step(0.4, abs(uv.x));   
                float my = step(0.4, abs(uv.y));   
                float alpha = 1 - mx*my*step(0.1, length(half2(rx,ry)));   
                fixed4 col = tex2D(_MainTex, i.uv);        

                uv = i.uv - fixed2(0.5,0.5);  
                _angle = 6.283*(_angle-0.5);  
                float hui =sign(_angle+atan2(uv.y, uv.x));
                return float4(hui,hui,hui,alpha);
            }
            ENDCG
        }
    }
}

 

 

				uv = i.uv - fixed2(0.5,0.5);  
				_angle = 6.283*(_angle-0.5);  
				//float hui = (2-sign(_angle-atan2(uv.y, uv.x))); // 百分比计算
				float hui = atan2(uv.y, uv.x);
				return float4(hui,hui,hui,alpha);

技能CD 效果

原文:http://www.cnblogs.com/jqm304775992/p/4988016.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!