UnityShader之实现序列图动画播放功能。在Unity中,通过S丝群闻栝hader的通过改变shader的uv方法实现序列图的动画播放功能,具体如下
工具/原料
Unity
Shader
方法/步骤
1、打开Unity,新建一个空工程,具体如下图
2、向工程中导入一个序列图,具体如下图
3、在工程中新建一个Shader脚本,可以命名为“SequenceAnimation”,双击脚本进行代码编辑,具体如下图
4、“SequenceAnimation”脚本的具体代码和代码说明如下图
5、“SequenceAnim瞢铍库祢ation”脚本具体内容如下:Shader"Custom/Se鳎溻趄酃quenceAnimation"{ Properties{ _MainColor("MainColor",Color)=(1,1,1,1) //颜色修改参数 _MainTex("MainTexture",2D)="white"{} //序列贴图参数 _HorNum("HorizontalNumber",float)=4 //水平序列图个数 _VerNum("VerticalNumber",float)=2 //竖直序列图个数 _Speed("Speed",float)=7 //控制序列图播放速度参数 } SubShader{ Pass{ CGPROGRAM #pragmavertexvert #pragmafragmentfrag #include"UnityCG.cginc" //对应属性的参数生命,才能在CG编程中使用 sampler2D_MainTex; float4_MainColor; float_HorNum; float_VerNum; float_Speed; //定义数据结构获取顶点信息和纹理坐标 structappdata{ float4vertex:POSITION; float2uv:TEXCOORD0; }; //定义数据结构获取顶点信息和纹理坐标 structv2f{ float4vertex:SV_POSITION; float2uv:TEXCOORD0; }; v2fvert(appdatav){ v2fo; //物体的模型到世界矩阵*从世界到摄像机的矩阵*投影的矩阵 o.vertex=UnityObjectToClipPos(v.vertex); o.uv=v.uv; returno; } //实现序列图动画变化的关键函数 float4SequenceAnimationFunc(v2fi){ //是序列图仅显示序列图中的一个图 half2uv=float2(i.uv.x/_HorNum,i.uv.y/_VerNum); floattime=floor(_Time.y*_Speed); floatrow=floor(time/_HorNum); floatcol=time-row*_HorNum; uv.x+=col/_HorNum; uv.y-=row/_VerNum; //把前面的uv数据与序列图组合显示,并且混合颜色 fixed4color=tex2D(_MainTex,uv); color.rgb*=_MainColor.rgb; returncolor; } float4frag(v2fi):Color{ //调用序列图动画函数,实现序列图动画效果 float4color=SequenceAnimationFunc(i); returncolor; } ENDCG } }}
6、脚本编译正确,会带Unity,在场景中添加两个Ima壹执慵驾ge,在工程中新建两个材质,并分别把shader赋值为惺绅寨瞀“Standard”和“SequenceAnimation”,作为对比效果,具体如下图
7、把材质赋值序列图,并把参数对应赋值上,然后把两个材质分别赋值给对应Image,具体如下图
8、运行场景,就是先了序列图播放效果,具体如下图