失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Unity Shader播放序列帧动画

Unity Shader播放序列帧动画

时间:2018-09-12 09:18:58

相关推荐

Unity Shader播放序列帧动画

1 Shader "LordShader/AnimateSprite" { 2Properties { 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} 9SubShader {10 Tags { "RenderType"="Opaque" }11 LOD 20012 13 CGPROGRAM 14 #pragma surface surf Lambert15 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 ENDCG47} 48FallBack "Diffuse"49 }

如果觉得《Unity Shader播放序列帧动画》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。