Unity 使用Shader实现序列帧动画
序列帧动画图片使用shader逐帧播放
可以直接使用,拿走不谢。
可以挂到材质上放入Image组件的材质中使用。
Shader "Custom/FrameAnim"
{Properties{_Color("Color", Color) = (1, 1, 1, 1)//颜色[PerRendererData]_MainTex("Image Sequence", 2D) = "white" {}//图片_HorizontalAmount("Horizontal Amount", Float) = 2//水平列数_VerticalAmount("VerticalAmount", Float) = 2//垂直行数_Speed("Speed", Range(1, 10)) = 30//播放速度}SubShader{LOD 200Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent"} PASS{Tags { "LightMode" = "ForwardBase" }ZWrite OffBlend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"#include "Lighting.cginc"fixed4 _Color;float _Speed;float _HorizontalAmount;float _VerticalAmount;sampler2D _MainTex;float4 _MainTex_ST;struct _2vert{float4 vertex: POSITION;float4 texcoord: TEXCOORD0;};struct vert2frag{float4 pos: SV_POSITION;float2 uv: TEXCOORD0;};vert2frag vert(_2vert v){vert2frag o;o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);return o;}fixed4 frag(vert2frag i) : SV_Target{//floor返回小于等于的最大整数//获得虚拟时间,并进行拉伸取整,缩短图片间播放间隔,方便取模float time = floor(_Time.y * _Speed);//获得总图片数量 _HorizontalAmount * _VerticalAmount//对总数取模,得到当前时间点要播放的图片索引号,即整体的第几张图片float row = time % (_HorizontalAmount * _VerticalAmount);//水平方向取模,获取行的索引号float posx = floor(row % _HorizontalAmount);//floor(row / _HorizontalAmount)能获得纹理坐标竖直方向的序列数//Unity的纹理坐标竖直方向的顺序和序列帧纹理中竖直方向上的顺序是相反的。//用总体-1-纹理坐标序列数得到序列帧纹理中竖直方向索引号float posy = _VerticalAmount - floor(row / _HorizontalAmount) - 1;//添加到uv坐标上half2 uv = i.uv + half2(posx, posy);//缩小范围uv.x /= _HorizontalAmount;uv.y /= _VerticalAmount;fixed4 color = tex2D(_MainTex, uv);//添加颜色color.rgb *= _Color;return color;}ENDCG}}FallBack "Transparent/VertexLit"
}
Unity 使用Shader实现序列帧动画相关推荐
- Unity——用代码实现序列帧动画
序列帧动画经常用到,最直接的方式就是用Animation录制.但某些情况下这种方式并不是太友好,需要靠代码的方式进行序列帧动画的实现. 代码实现序列帧动画,基本的思路是定义一个序列帧的数组/列表,根据 ...
- Unity——通过Shader 制作精灵动画,瀑布
//精灵动画 Shader "zhaoguanghui/spriteAction" { Properties { _MainTex ("Base (RGB)", ...
- Unity序列帧动画——Sprite图片集制作UI动画
分享一个十分简单的在Unity中制作UI序列帧动画的方法.只需要将动画中要显示的图片导入Unity,将所有图片的TextureType设置成Sprite格式,然后全选所有图片,拖到场景中,提示要创建动 ...
- Shader学习17——序列帧动画
序列帧动画实际就是动态地去改UV点就行,实现的时候注意一下怎么取行列就可以 Mar-05-2021 15-16-55.gif c#代码里控制_Process的赋值,从1-行*列总数循环即可.测试的时候 ...
- Unity Shader 序列帧动画
shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分. Unity Shader 内置时间变量 名称 类型 描述 _Time floa ...
- Unity shader入门精要学习笔记-代码篇6(序列帧动画/滚动背景/流动河流/广告牌/顶点动画的阴影)
一.序列帧动画 建立一个四边形对着摄像机. 我们需要一张序列帧图像,这里用到8x8的爆炸图. 给四边形上材质和shader,代码如下: Shader "Custom/NewSurfaceSh ...
- Unity序列帧动画疑难解答
**Unity序列帧动画疑难解答 熟悉界面: 界面熟悉很重要,千万不要发生与别人沟通时你说菜单他去找工具栏的情况. **菜单栏:**基础创建设置工具等功能入口 **工具栏:**软件内的基本操作工具,基 ...
- Unity图片序列帧动画
unity制作序列帧两种简单方法 1.美术将整个序列帧动画图片分割为多个png图片,如 然后选中所有,鼠标拖入Hierarchy面板,unity就会自动生成序列帧动画游戏对象,点击unity播放按钮就 ...
- unity ParticleSystem 实现序列帧动画效果(一)
用粒子系统实现序列帧动画优势: 先附上一个 介绍序列帧实现方式比较的链接 点击打开链接 在该链接里说较为倾向于使用该方式俩实现序列帧动画,那么具体的好处又有哪些呢? 此处再贴一个链接,这里介绍了下粒子 ...
- ❤️❤️❤️Unity废柴看过来,手把手教你做植物大战僵尸(二)—— 序列帧动画
开始制作游戏,首先,我们要把游戏素材导入到项目中,我这里整理出来了一些项目中用到的图片音乐等素材,大家可以下载下来使用,或者自己从网上找其他好看的素材也可以. 植物大战僵尸素材 链接:https:// ...
最新文章
- Maya基础入门学习教程
- 这个操作稳!云厂商开设免费云计算课程,学员独享49元主机套餐包年!
- VC防止程序被多次运行 互斥体方法
- python多列填充缺点_在Python中比较多列中的值并在另一列中添加新值
- Day03:文件打开;错误处理
- miui替换官方文件解决无服务器,miui 关掉云服务器
- Angular1.63 绑定数据与继承
- 中countif函数_Count系列函数-Count、Counta、Countblank、Countif、Countifs
- PHP学习总结(10)——PHP入门篇之自定义网站根目录
- 如何在双显示器设置中将 Mac Dock 保持在一个屏幕上?
- 配置核查保密检查等保工具箱态势感知
- python制作动态二维码步骤_七夕 | 如何用Python制作动态二维码,来哄女朋友开心?...
- [Power--IC]电源管理IC-STNS01
- android imageview图片崩溃,安卓 ImageView 的使用及崩溃闪退、空白原因
- 贵阳中天会展城A10大平层350平米户型装修设计效果图
- OPC基本知识介绍——什么是OPC
- java毕业设计的健身俱乐部综合管理系统mybatis+源码+调试部署+系统+数据库+lw
- 详解Win10家庭版/专业版/企业版功能区别
- 2017年-2018年成长计划
- mysql guanwnag_Error while deserializing binlog event at offset
热门文章
- 能源管理模式数字化,引导未来能源服务新方向!
- 财务数字变革新契机丨RPA应用于财务领域的5大场景
- 投资银行业务法规汇编----仅供学习
- php 伪静态 获取当前页面路径_php url伪静态过程详解
- 零起点学习Linux系列培训视频 [共61课] (万分感谢寒冰老师分享!)
- iPhone 11 820-01523 N104手机电路原理图+位号图
- vs2010断点调试详细教程
- MATLAB机械动力分析,基于MATLAB的柔性机械臂动力学分析.pdf
- 计算机键盘的区域,刘坚强办公学《新手学五笔打字》1-1 键盘区域的划分
- [转载]U盘文件夹乱码无法删除的原因及解决方案