unity 支持半透物体的流光效果(vf版本)

最近特效制作说要加个特效流光,就写了一下

使用方法和之前部分模型流光效果一直

https://blog.csdn.net/SnoopyNa2Co3/article/details/86690580

这个是手动流光,方便特效k动画

如果要自动流光则改改uv赋值

			//流光图y轴偏移
			uv.y += _Time.y * _SpeedY;
			//流光图x轴偏移
			uv.x += _Time.y * _SpeedX;

下面是shader

Shader "Effect/Ext/MoveLight"
{
	Properties
	{
		_MainTex("Particle Texture", 2D) = "black" {}
		//流光图
		_LightTex("Light Texture",2D) = "white"{}
		//流光颜色
		_MoveLightColor("MoveLightColor", Color) = (1,1,1,1)
		//流光uv x轴速度
		_SpeedX("SpeedX", Range(-1,1)) = 0.0
		//流光uv y轴速度
		_SpeedY("SpeedY", Range(-1,1)) = 0.0
		//流光宽度
		_LightWidth("LightWidth",Range(1,20)) = 1
	}
	Category
	{
		Tags{ "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Effect" "PreviewType" = "Plane" }

		SubShader
		{
		Pass
		{
			Blend SrcAlpha One
			Cull Off Lighting Off ZWrite Off Fog{ Mode Off }

			CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_particles
#pragma fragmentoption ARB_precision_hint_fastest 
#include "UnityCG.cginc"
			sampler2D _MainTex;
			half4 _MainTex_ST;
			sampler2D _LightTex;
			float4 _MoveLightColor;
			float _SpeedY;
			float _SpeedX;
			float _LightWidth;

			struct v2f 
			{
				half4 pos : SV_POSITION;
				half2 uv : TEXCOORD0;
				fixed4 vertexColor : COLOR;
			};

			v2f vert(appdata_full v) 
			{
				v2f o;

				o.pos = UnityObjectToClipPos(v.vertex);
				o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
				o.vertexColor = v.color;

				return o;
			}

			float4 frag(v2f i) : COLOR
			{
				//计算流光宽度uv坐标越少,则获取白色流光图白色区域越大,就等于流光长度
				float2 uv = i.uv / _LightWidth;
				//流光图y轴偏移
				uv.y += _SpeedY;
				//流光图x轴偏移
				uv.x += _SpeedX;
				//获取流光图的蓝色通道,因为流光图都是黑白,获取红色绿色通道都可以
				fixed light = tex2D(_LightTex, uv).b;
				//获取要显示流光的位置,我这里使用蓝色通道来处理,我这边不用alpha来处理,因为透明图占内存
				//这里算出要流光的地方叠加颜色
				fixed4 c = light * _MoveLightColor * 2 + tex2D(_MainTex, i.uv.xy);
				return c;
			}

			ENDCG
		}
		}
}
Fallback "VertexLit"
}

猜你喜欢

转载自blog.csdn.net/SnoopyNa2Co3/article/details/89284282