UnityShader教程之序列帧动画效果的实现,本节介绍,在Unity患束锍瓜开发中,使用Shader实现序列帧动画播放的效果,具体如下
工具/原料
Unity
方法/步骤
1、在Unity中新建一个工程,并且在场景中添加一个Plane,具体如下图
2、导入一个序列图,一般的序列图效果如下图
3、在在工程中新建一个Shader脚本,命名为UVAnimation,双击打开进行代码编辑,具体如下图
4、UVAnimation脚本具体代码如下图
5、UVAnimation脚本具体内容如下:Shader"Cust艺皱麾酪om/UVAnimation"{Prop髫潋啜缅erties{_Color("BaseColor",Color)=(1,1,1,1)_MainTex("Base(RGB)",2D)="white"{}}SubShader{tags{"Queue"="Transparent""RenderType"="Transparent""IgnoreProjector"="True"}BlendSrcAlphaOneMinusSrcAlphaPass{CGPROGRAM#pragmavertexvert#pragmafragmentfrag#include"UnityCG.cginc"float4_Color;sampler2D_MainTex;structv2f{float4pos:POSITION;float2uv:TEXCOORD0;};float2moveUV(float2vertUV){//因为序列图有12帧所以是12floattextureNum=12.0;floattimePerFrame=100;floatindex=frac(_Time.x/textureNum*timePerFrame);float2uvScale=float2(1/textureNum,1);if(index<=uvScale.x)returnvertUV*uvScale;elseif(index<=2*uvScale.x)returnvertUV*uvScale+float2(uvScale.x,0.0);elseif(index<=3*uvScale.x)returnvertUV*uvScale+float2(2*uvScale.x,0.0);elseif(index<=4*uvScale.x)returnvertUV*uvScale+float2(3*uvScale.x,0.0);elseif(index<=5*uvScale.x)returnvertUV*uvScale+float2(4*uvScale.x,0.0);elseif(index<=6*uvScale.x)returnvertUV*uvScale+float2(5*uvScale.x,0.0);elseif(index<=7*uvScale.x)returnvertUV*uvScale+float2(6*uvScale.x,0.0);elseif(index<=8*uvScale.x)returnvertUV*uvScale+float2(7*uvScale.x,0.0);elseif(index<=9*uvScale.x)returnvertUV*uvScale+float2(8*uvScale.x,0.0);elseif(index<=10*uvScale.x)returnvertUV*uvScale+float2(9*uvScale.x,0.0);elseif(index<=11*uvScale.x)returnvertUV*uvScale+float2(10*uvScale.x,0.0);elsereturnvertUV*uvScale+float2(11*uvScale.x,0.0);}v2fvert(appdata_basev){v2fo;o.pos=mul(UNITY_MATRIX_MVP,v.vertex);o.uv=moveUV(v.texcoord.xy);returno;}half4frag(v2fi):COLOR{half4c=tex2D(_MainTex,i.uv)*_Color;returnc;}ENDCG}}}
6、脚本编译正确,回到Unity新建一个材质,把Shade筠续师诈r设置为新建的Shader,图片附上对应的序列帧图片,并把材质赋给Plane,具体如下图
7、运行场景,就实现序列帧动画效果,具体如下图