Unity Shader播放序列帧动画
Shader "LordShader/AnimateSprite" {
Properties {
_MainTint ("Diffuse Color", Color) = (,,,) //颜色属性,可以在u3d inspector面板控制该变量
_MainTex("Base (RGB)",2D) = "white" {} //贴图
_TexWidth("Sheet Width",float) = 0.0 //贴图宽度像素值
_SpriteFrameNum("Sprite Frame Counts",float) = 9.0 //总帧数
_Speed("Speed ",Range(0.01,)) = //播放速度
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD
CGPROGRAM
#pragma surface surf Lambert
fixed4 _MainTint; //主颜色
sampler2D _MainTex; //主贴图
float _TexWidth; //贴图宽度像素值
float _SpriteFrameNum; //动画帧数
float _Speed; //播放速度
float _TimeValue; //从脚本传递过来的数
struct Input {
float2 uv_MainTex;
};
void surf (Input IN, inout SurfaceOutput o) {
float2 spriteUV = IN.uv_MainTex;
float uAddPerFrame = / _SpriteFrameNum; //每一帧U值的增量
//获取一个0 1 2 3 循环的值
//fmod 返回 x/y 的余数(取模)。如果 y 为 0 ,结果不可预料
float timeVal = fmod(_Time.y * _Speed,_SpriteFrameNum); //进行取余数操作 得到当前要显示的图片的下标
timeVal = ceil(timeVal);
//float timeVal = _TimeValue; //_TimeValue直接通过脚本传递 material.SetFloat("_TimeValue",timeVal);
float xValue = spriteUV.x; //UV坐标中的X坐标(0到9)
xValue *= uAddPerFrame; //把UV值指定到第一张小图的范围 注意
xValue += timeVal * uAddPerFrame; //每次执行把图片切下一张小图,累加u的增量值
spriteUV = float2(xValue,spriteUV.y);
fixed4 c = tex2D (_MainTex, spriteUV) * _MainTint;
o.Albedo = c.rgb * _MainTint;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}

Unity Shader播放序列帧动画的更多相关文章
- Unity Shader 之 uv动画
Unity 动画 Unity Shader 内置时间变量 引入时间变量 名称 类型 描述 _Time float4 t是自该场景加载开始所经过的时间,4个分量分别是(t/20, t, 2t, 3t) ...
- Unity NGUI实现序列帧动画播放
如题,要实现序列帧的播放导入图片的时候需要注意: (1)图片的命名要连续,如图: (2)将这些图片在NGUI中打包成Altas图集的时候图片应该在同一个Altas中: 这里以播放特效为例,满足条件时播 ...
- Shader实例:序列帧动画
效果: 序列帧图片网上随便找的,质量不是很好,重点不是它,不要在意. 思路: 1.之前都是在一张面片上直接映射一张纹理,IN.uv的范围是0~1 现在要映射一张纹理上的一小块区域,就要用这块区域的uv ...
- Unity Shader序列帧动画学习笔记
Unity Shader序列帧动画学习笔记 关于无限播放序列帧动画的一点问题 在学shader的序列帧动画时,书上写了这样一段代码: fixed4 frag(v2f i){ // 获得整数时间 flo ...
- [Cocos2d-x v3.x]序列帧动画
简单介绍 Cocos2d-x中.动画的详细内容是依靠精灵显示出来的,为了显示动态图片,我们须要不停切换精灵显示的内容.通过把静态的精灵变为动画播放器从而实现动画效果. 动画由帧组成,每一帧都是一个 ...
- (转)NGUI系列教程七(序列帧动画UITexture 和 UIsprit)
NGUI系列教程七(序列帧动画) 今天我给大家讲一下如何使用NGUI做序列帧动画.本节主要包括两方面内容,分别是使用UIspirit和使用UITexture 做序列帧动画.废话不说了,下面开始.还 ...
- NGUI系列教程七(序列帧动画)
今天我给大家讲一下如何使用NGUI做序列帧动画.本节主要包括两方面内容,分别是使用UIspirit和使用UITexture 做序列帧动画.废话不说了,下面开始.还要在啰嗦一句,首先大家要准备一些序列帧 ...
- unity shader序列帧动画代码,顺便吐槽一下unity shader系统
一.看到UNITY论坛里有些人求unity shader序列帧动画,写shader我擅长啊,就顺势写了个CG的shader.代码很简单,就是变换UV采样序列帧贴图,美术配置行数列数以及变换速度. Sh ...
- Unity Shader 序列帧动画
shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分. Unity Shader 内置时间变量 名称 类型 描述 _Time floa ...
随机推荐
- python 第三方库 chardet
chardet是一个非常优秀的编码识别模块.chardet 是python的第三方库,需要下载和安装,放在python安装根目录\Lib\site-packages下面 import chardet ...
- About View
View Geometry Frame & Bounds Graphically, a view can be regarded as a framed canvas. The frame l ...
- Java 获取APK安装程序的包名
Java 获取APK安装程序的包名核心的两个类: ResPackage ApkDecoder package com.temobi.util; import java.io.File; impo ...
- stm32启动文件 startup_stm32f10x_hd.s
;* 文件名 : startup_stm32f10x_hd.s;* 库版本 : V3.5.0;* 说明: 此文件为STM32F10x高密度 ...
- 几种判断asp.net中session过期方法的比较
方法一:最麻烦也是最容易想到的方法,在每个页面的page_load()方法里面判断: protected void Page_Load(object sender, EventArgs e) { if ...
- 新浪微博sdk bug
最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理 ...
- Java容器类接口:Iterator,Collection,Map
Iterator Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作: 使用方法iterator()要求容器返回一个Iterator,Iterator将返 ...
- ERP存储过程的调用和树形菜单的加载(四)
引用:DAL:System.Data.SqlClient;System.Data; namespace CommTool { public class SqlComm { /// <summar ...
- PHP extract() 函数
PHP extract() 函数从数组中把变量导入到当前的符号表中. 对于数组中的每个元素,键名用于变量名,键值用于变量值. 第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时, ...
- HDU 1848
http://acm.hdu.edu.cn/showproblem.php?pid=1848 利用计算grundy数组,把一类博弈转化为nim博弈,最后x不为0为先手必胜态 #include < ...