Unity Shader教程之 序列帧动画效果的实现

 时间:2024-10-11 19:33:16

1、在Unity中新建一个工程,并且在场景中添加一个 Plane,具体如下图

Unity Shader教程之 序列帧动画效果的实现
Unity Shader教程之 序列帧动画效果的实现

2、导入一个序列图,一般的序列图效果如下图

Unity Shader教程之 序列帧动画效果的实现
Unity Shader教程之 序列帧动画效果的实现

3、在在工程中新建一个Shader 脚本,命名为UVAnimation,双击打开进行代码编辑,具体如下图

Unity Shader教程之 序列帧动画效果的实现

4、UVAnimation 脚本具体代码如下图

Unity Shader教程之 序列帧动画效果的实现
Unity Shader教程之 序列帧动画效果的实现
Unity Shader教程之 序列帧动画效果的实现

5、UVAnimation 脚本具体内容如下:Shader "Custom/UVAnimation" {Prop髫潋啜缅erties{_Color("Base Color", Color) = (1,1,1,1)_MainTex("Base(RGB)", 2D) = "white" {}}SubShader{tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}Blend SrcAlpha OneMinusSrcAlphaPass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" float4 _Color; sampler2D _MainTex;struct v2f{ float4 pos:POSITION; float2 uv:TEXCOORD0;};float2 moveUV(float2 vertUV){ //因为序列图有12帧所以是12 float textureNum = 12.0; float timePerFrame = 100; float index = frac(_Time.x / textureNum * timePerFrame); float2 uvScale = float2(1 / textureNum, 1); if (index <= uvScale.x) return vertUV * uvScale; else if (index <= 2 * uvScale.x) return vertUV * uvScale + float2(uvScale.x, 0.0); else if (index <= 3 * uvScale.x) return vertUV * uvScale + float2(2 * uvScale.x, 0.0); else if (index <= 4 * uvScale.x) return vertUV * uvScale + float2(3 * uvScale.x, 0.0); else if (index <= 5 * uvScale.x) return vertUV * uvScale + float2(4 * uvScale.x, 0.0); else if (index <= 6 * uvScale.x) return vertUV * uvScale + float2(5 * uvScale.x, 0.0); else if (index <= 7 * uvScale.x) return vertUV * uvScale + float2(6 * uvScale.x, 0.0); else if (index <= 8 * uvScale.x) return vertUV * uvScale + float2(7 * uvScale.x, 0.0); else if (index <= 9 * uvScale.x) return vertUV * uvScale + float2(8 * uvScale.x, 0.0); else if (index <= 10 * uvScale.x) return vertUV * uvScale + float2(9 * uvScale.x, 0.0); else if (index <= 11 * uvScale.x) return vertUV * uvScale + float2(10 * uvScale.x, 0.0); else return vertUV * uvScale + float2(11 * uvScale.x, 0.0);}v2f vert(appdata_base v){ v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = moveUV(v.texcoord.xy); return o;}half4 frag(v2f i):COLOR{half4 c = tex2D(_MainTex, i.uv) * _Color;return c;}ENDCG}}}

6、脚本编译正确,回到Unity新建一个材质,把Shade筠续师诈r设置为新建的 Shader,图片附上对应的序列帧图片,并把材质赋给 Plane,具体如下图

Unity Shader教程之 序列帧动画效果的实现
Unity Shader教程之 序列帧动画效果的实现

7、运行场景,就实现序列帧动画效果,具体如下图

Unity Shader教程之 序列帧动画效果的实现
  • 王者荣耀如何调整分路?
  • 为什么我赵云技能滑不快
  • 浮生为卿歌武则天是谁
  • 王者营地如何设置铭文陌生人不可见?
  • 王者荣耀如何投屏到电视机上
  • 热门搜索
    植物手抄报 8k手抄报版面设计图 小学生守则手抄报 成语手抄报 交通手抄报图片大全 关于手抄报的花边 走进名著手抄报内容 教师节手抄报简单又漂亮 关于西游记的手抄报 关于弟子规的手抄报