shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分。

Unity Shader 内置时间变量
名称 类型 描述
_Time float4 (t/20,t,2t,3t)   其中t为自该场景加载所经过时间
_SinTime float4 (t/8,t/4,t/2,t)  其中t为自该场景加载所经过时间的正弦值
_CosTime float4 (t/8,t/4,t/2,t)  其中t为自该场景加载所经过时间的余弦值
unity_DeltaTime float4 (dt,1/dt,sdt,1/sdt)  其中dt为时间增量,sdt为时间增量的平滑值

脚本如下:

 1 Shader "MyUnlit/FrameAnimation"
 2 {
 3     Properties
 4     {
 5         _Color("Color Tint",color)=(1,1,1,1)
 6         _MainTex ("Texture", 2D) = "white" {}
 7         _CutX("CutX Amount",float)=4
 8         _CutY("CutY Amount",float)=4
 9         _Speed("Speed",range(1,100))=30
10     }
11     SubShader
12     {
13         //一般序列帧动画的纹理会带有Alpha通道,因此要按透明效果渲染,需要设置标签,关闭深度写入,使用并设置混合
14         Tags { "RenderType"="transparent" "queue"="transparent" "ignoreprojector"="true" }
15         ZWrite off
16         blend srcalpha oneminussrcalpha
17
18         Pass
19         {
20             Tags{"lightmode"="forwardbase"}
21
22             CGPROGRAM
23             #pragma vertex vert
24             #pragma fragment frag
25             #pragma multi_compile_fog
26
27             #include "UnityCG.cginc"
28
29             struct appdata
30             {
31                 float4 vertex : POSITION;
32                 float2 uv : TEXCOORD0;
33             };
34
35             struct v2f
36             {
37                 float2 uv : TEXCOORD0;
38                 UNITY_FOG_COORDS(1)
39                 float4 vertex : SV_POSITION;
40             };
41
42             sampler2D _MainTex;
43             float4 _MainTex_ST;
44             fixed4 _Color;
45             float _CutX;
46             float _CutY;
47             float _Speed;
48
49             v2f vert (appdata v)
50             {
51                 v2f o;
52                 o.vertex = UnityObjectToClipPos(v.vertex);
53                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
54                 UNITY_TRANSFER_FOG(o,o.vertex);
55                 return o;
56             }
57
58             fixed4 frag (v2f i) : SV_Target
59             {
60                 //取得整数的时间
61                 float time = floor(_Time.y*_Speed);
62                 //整除部分为行(因为播放顺序是从左到右,先行后列)
63                 float row = floor(time / _CutX);
64                 //余数部分为列
65                 float column = time - row * _CutX;
66
67                 //计算偏移值,其中u向为列索引值,v向为行索引的相反数(播放原点是左上角,而uv采样原点是左下角,所以v向偏移应该取反)
68                 half2 uv = i.uv + half2(column,-row);
69                 //除以行列得到最终的采样值
70                 uv.x /= _CutX;
71                 uv.y /= _CutY;
72
73                 fixed4 col = tex2D(_MainTex,uv);
74                 col.rgb *= _Color;
75                 UNITY_APPLY_FOG(i.fogCoord, col);
76                 return col;
77             }
78             ENDCG
79         }
80     }
81     FallBack "Transparent/VertexLit"
82 }

转载于:https://www.cnblogs.com/koshio0219/p/11119787.html

Unity Shader 序列帧动画相关推荐

  1. Unity图片序列帧动画

    unity制作序列帧两种简单方法 1.美术将整个序列帧动画图片分割为多个png图片,如 然后选中所有,鼠标拖入Hierarchy面板,unity就会自动生成序列帧动画游戏对象,点击unity播放按钮就 ...

  2. Unity Shader 顶点动画 广告牌

    另一种常见的顶点动画就是广告牌技术(Billboarding).广告牌技术会根据视角方向来旋转一个被纹理着色的多边形(通常就是简单的四边形,这个多边形就是广告牌),使得多边形看起来好像总是面对这摄影机 ...

  3. Unity Shader UV动画之高光材质加上透明材质与UV动画

    理解,UV动画实质是对UV的坐标进行变化,从而使纹理产生动态变化 例子:从高光材质进行修改 1,加上透明材质的标签以及混合模式,再使用带透明通道的贴图,可以实现:不透明部分的图案,材质是高光材质,透明 ...

  4. Unity Shader - 顶点动画 - Sin 模拟简单的波浪

    创建一个shader,贴下下面code 创建一个material,设置Shader:Custom/Wave 纹理百度随便下载一个水贴图,设置到meterial中的Tex,(不设置也可以,默认white ...

  5. Unity shader入门精要学习笔记-代码篇6(序列帧动画/滚动背景/流动河流/广告牌/顶点动画的阴影)

    一.序列帧动画 建立一个四边形对着摄像机. 我们需要一张序列帧图像,这里用到8x8的爆炸图. 给四边形上材质和shader,代码如下: Shader "Custom/NewSurfaceSh ...

  6. Unity Shader学习记录(18) —— Shader动画

    纹理动画 纹理动画在游戏中的应用非常广泛.尤其在各种资源都比较局限的移动平台上,我们往往会使用纹理动画来代替复杂的粒子系统等模拟各种动画效果. 11.2.1序列帧动画 _Time是float4类型, ...

  7. Unity Shader 动画

    Unity Shader中的内置变量(时间) 动画效果往往都是把时间添加到一些变量的计算中,以便在时间变换时画面也可以随之变化.Unity Shader提供了一系列关于时间的内置变量来允许我们方便在S ...

  8. Unity序列帧动画疑难解答

    **Unity序列帧动画疑难解答 熟悉界面: 界面熟悉很重要,千万不要发生与别人沟通时你说菜单他去找工具栏的情况. **菜单栏:**基础创建设置工具等功能入口 **工具栏:**软件内的基本操作工具,基 ...

  9. Unity序列帧动画——Sprite图片集制作UI动画

    分享一个十分简单的在Unity中制作UI序列帧动画的方法.只需要将动画中要显示的图片导入Unity,将所有图片的TextureType设置成Sprite格式,然后全选所有图片,拖到场景中,提示要创建动 ...

最新文章

  1. ajax datatype为html,Jquery ajax请求中datatype的含义
  2. python【蓝桥杯vip练习题库】ADV-303 数组求和
  3. 参数(parameter)和属性(attribute)的区别
  4. xcode 4 最低的要求是 10.6.6的版本,如果你是 10.6.3的版本,又不想升级的话。可以考虑通过修改版本号的方法进行安装
  5. kafka分区与分组原理_大数据技术-Kafka入门
  6. Python中的split()函数
  7. 【MVC4升级到MVC5】ASP.Net MVC 4项目升级MVC 5的方法
  8. Lattice的JTAG编程烧录
  9. sketch软件_初学UI设计要学sketch软件吗?
  10. python之numpy之方差numpy.var
  11. JAVA文件夹批量重命名
  12. 微信公众号素材html,微信公众号运营必备:10个免费高清图片素材网站
  13. Processing鼠标键盘
  14. 圆形谷仓Circular Barn_Silver---(DP优化 / )队列 + 贪心(复杂度O(2n))---DD(XYX)​​​​​​​的博客
  15. 【如何设定系统的定时与延迟任务】
  16. linux peek,Peek - Gif 录制软件
  17. 每日股市大盘自动复盘(基于聚宽量化投资平台)
  18. STM32F407ZGT6之硬件介绍
  19. 正点原子 Linux驱动开发学习笔记-06 chrdevbase虚拟设备驱动的完善
  20. 区块链中nonce与难度系数

热门文章

  1. Python【3】-字典dic和集合set
  2. 推荐美加版S3好用的两个ROM
  3. linux,apache,php,mysql常用的查看版本信息的方法
  4. RHEL4-SFTP配置
  5. 关于甲沟炎的一些办法
  6. intellij中java文件都是灰色
  7. OpenCV学习笔记三-Mat数据结构
  8. anaconda 安装 pytorch
  9. python指定变量类型_Python#160;变量类型_python教程
  10. HTML--- 创建一个登录页面(HTML,CSS)