2.1 准备工作(1)创建一个场景,这次为了效果明显,我们去掉天空盒子 (2)创建一个 Quad,一个 Material,一个 shader,命名为 SequenceAnimation (3)准备一张序列帧图像,这里笔者使用的是一张包含了 4 x 4 张关键帧的图像 这 16 张关键帧图像的大小相同,我们要实现的是让它们从左到右,从上到下播放。所以我们要做的就很简单了,只需要在播放时记录下应该播放的关键帧的位置(UV坐标),然后进行采样就行了。   2.2 Shader 实现序列帧图像往往被当成是一个半透明对象,所以我们以对待半透明对象的方法来对待它。如果对半透明原理及实现方法不熟悉的读者可以翻看这篇博文  1     Properties 2     { 3         _Color ("Color", Color) = (1,1,1,1) 4         _MainTex ("Sequence Image", 2D) = "white" {} 5         _Speed("Speed", Range(1,100)) = 50 6         _HorizontalAmount ("Horizontal Amount",float) = 4 7         _VerticalAmount ("Vertical Amount",float) = 4 8     }  MainTex 对应着我们准备的序列帧图像,Speed 代表播放速度,HorizontalAmount 和 VerticalAmount 代表着图像在水平方向和竖直方向包含的关键帧图像个数。   II.定义 Tags 1 Tags{"Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"}序列帧图像一般都是透明纹理,所以这里我们设置为 Transparent   III. 定义相关属性与做出声明  1             Tags{"LightMode" = "ForwardBase"}  2             ZWrite Off  3             Blend SrcAlpha OneMinusSrcAlpha  4   5             CGPROGRAM  6             #pragma multi_compile_fwdbase  7             #include "UnityCG.cginc"  8             #pragma vertex vert  9             #pragma fragment frag 10  11             fixed4 _Color; 12             sampler2D _MainTex; 13             float4 _MainTex_ST; 14             float _Speed; 15             float _HorizontalAmount; 16             float _VerticalAmount;由于是半透明物体,所以我们关闭深度写入并开启混合。定义与 Properties 块中想匹配的属性   IV. 定义输入输出结构体  1             struct a2v  2             {  3                 float4 vertex : POSITION;  4                 float4 texcoord : TEXCOORD0;  5             };  6   7             struct v2f  8             {  9                 float4 pos : SV_POSITION; 10                 float2 uv : TEXCOORD0; 11             };  这个 shader 中我们主要是计算关键帧的位置和纹理采样,所以输入输出结构体我们不需要太复杂   V. 定义顶点着色器 1             v2f vert(a2v v) 2             { 3                 v2f o; 4                 o.pos =
                        关键字: 
                        
                            
                         
                     
                
            
            
            
                
                
             
        
    
 |