[UnityShader3]流光效果

参考链接: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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值