参考链接:http://www.unitymanual.com/thread-30314-1-1.html
首先直接上效果图:
动态的效果就是一条光线横扫着图标。
要制作流光效果,一般要用一张底图,一张流光图(流光图中的非光线部分最好是黑色的)。以下是本次使用的流光图:
好了现在我们来分析一下如何实现流光效果。
1.通过对效果图的分析,我们发现底图并没有发生变化,变的只是流光图(位置在不断改变),因此,我们要去改变流光图的uv。
2.从效果图来看,发生变化的是rgb值,又因为流光图中的非光线部分是黑色的(rgb值为0,这点很重要),所以最终的输出就是两图的rgb值之和。
3.流光纹理的Wrap Mode必须是Repeat。
代码如下:
Shader "Custom/Flow" {
Properties
{
_MainTex("底图 (RGB)", 2D) = "white" {}
_FlowTex("流光图 (A)", 2D) = "white" {}
_ScrollXSpeed("横向速度", Range(0, 10)) = 2
_ScrollYSpeed("竖向速度", Range(0, 10)) = 0
_ScrollDirection("方向", Range(-1, 1)) = -1
_FlowColor("流光颜色",Color) = (1,1,1,1)
}
SubShader
{
Tags{ "RenderType" = "Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _FlowTex;
fixed _ScrollXSpeed;
fixed _ScrollYSpeed;
fixed _ScrollDirection;
float4 _FlowColor;
struct Input {
float2 uv_MainTex;
float2 uv_FlowTex;
};
void surf(Input IN, inout SurfaceOutput o) {
//改变流光图的uv
fixed2 scrolledUV = IN.uv_FlowTex;
fixed xScrollValue = _ScrollXSpeed * _Time.y;// _Time.y等同于Time.timeSinceLevelLoad
fixed yScrollValue = _ScrollYSpeed * _Time.y;
scrolledUV += fixed2(xScrollValue, yScrollValue) * _ScrollDirection;
//颜色混合
half4 c = tex2D(_FlowTex, scrolledUV);
half4 d = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = c.rgb * _FlowColor.rgb + d.rgb;
o.Alpha = d.a;
}
ENDCG
}
FallBack "Diffuse"
}
这是unitypackage:
http://yun.baidu.com/s/10dQaU