Unity Shader播放序列帧动画

Posted For The Glory

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Shader播放序列帧动画相关的知识,希望对你有一定的参考价值。

 1 Shader "LordShader/AnimateSprite" {
 2     Properties {
 3         _MainTint ("Diffuse Color", Color) = (1,1,1,1)            //颜色属性,可以在u3d inspector面板控制该变量
 4         _MainTex("Base (RGB)",2D) = "white" {}  //贴图
 5         _TexWidth("Sheet Width",float) = 0.0    //贴图宽度像素值
 6         _SpriteFrameNum("Sprite Frame Counts",float) = 9.0  //总帧数
 7         _Speed("Speed ",Range(0.01,32)) = 12    //播放速度
 8     }
 9     SubShader {
10         Tags { "RenderType"="Opaque" }
11         LOD 200
12         
13         CGPROGRAM    
14         #pragma surface surf Lambert
15 
16         fixed4 _MainTint;            //主颜色
17         sampler2D _MainTex;            //主贴图
18         float _TexWidth;            //贴图宽度像素值
19         float _SpriteFrameNum;        //动画帧数
20         float _Speed;                //播放速度
21         float  _TimeValue;            //从脚本传递过来的数
22 
23         struct Input {
24             float2 uv_MainTex;
25         };
26 
27         void surf (Input IN, inout SurfaceOutput o) {
28             float2 spriteUV = IN.uv_MainTex;
29             float uAddPerFrame = 1 / _SpriteFrameNum;         //每一帧U值的增量
30             
31             //获取一个0 1 2 3 循环的值 
32             //fmod 返回 x/y 的余数(取模)。如果 y 为 0 ,结果不可预料
33             float timeVal = fmod(_Time.y * _Speed,_SpriteFrameNum);  //进行取余数操作 得到当前要显示的图片的下标
34             timeVal = ceil(timeVal);
35             
36             //float timeVal = _TimeValue;        //_TimeValue直接通过脚本传递 material.SetFloat("_TimeValue",timeVal);    
37             float xValue = spriteUV.x;            //UV坐标中的X坐标(0到9)
38             xValue *= uAddPerFrame;                //把UV值指定到第一张小图的范围 注意
39 
40             xValue += timeVal * uAddPerFrame; //每次执行把图片切下一张小图,累加u的增量值
41             spriteUV = float2(xValue,spriteUV.y);        
42             fixed4 c = tex2D (_MainTex, spriteUV) * _MainTint;
43             o.Albedo = c.rgb * _MainTint;
44             o.Alpha = c.a;
45         }
46         ENDCG
47     } 
48     FallBack "Diffuse"
49 }

 

以上是关于Unity Shader播放序列帧动画的主要内容,如果未能解决你的问题,请参考以下文章

unity怎么让贴图序列播放

Unity自定义组件之序列帧播放组件

Cg入门23: Fragment shader – UV动画(序列帧)

Unity 2D:创建序列帧动画

跟我一起学Unity3D代码中分割图片而且载入帧序列动画

unity shader 基础之十一 动画屏幕后处理深度纹理