Sprite动画效果实现

Posted dreamnwx1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sprite动画效果实现相关的知识,希望对你有一定的参考价值。

2D游戏中通过短时间内快速切换贴图来实现动画效果。为了减少贴图数量,可以合并为一张贴图,根据时间来修改UV坐标,达到和切换贴图一样的效果。
在UnityShader的Properties块中,定义属性:

Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
    _CellAmount ("Cell Amount", float) = 0.0
    _Speed ("Speed", float) = 12
}

这里定义了合并后的贴图、子贴图数量和切换动画的速度。
在CG代码中可以这么写:

float spriteUV = IN.uv_MainTex;    //得到UV坐标

float cellUVPercentage = 1.0 / _CellAmount;  //每个单元格占有的百分比

float timeVal = fmod(_Time.y * _Speed, _cellAmount);    //按照时间获取当前需要展示的单元格
timeVal = ceil(timeVal);    //向上取整,得到单元格的下标

float xValue = spriteUV.x;
xValue += timeVal;
xValue *= cellUVPercentage;    //修正UV,加上offset
spriteUV = float2(xValue, spriteUV.y);

这里没有修改UV的y分量,如果我们合并的贴图是按grid方式排列,那么是需要对y也做类似操作。
代码部分的主要难点是如何做修正。先求出每一cell所占的百分比cellUVPercentage,如8张贴图并排合并成一张贴图,那么cellUVPercentage=1.0/8=0.125。
第一个cell的区间:0 - 0.125
第二个cell的区间:0.125 - 0.25
......
第八个cell的区间:0.875 - 1.0
所以按照时间分别取得0,1,2,3,...,7,0,1,2,3,....。









以上是关于Sprite动画效果实现的主要内容,如果未能解决你的问题,请参考以下文章

cocos2dx 3.x(实现帧动画(人物动画,跑马灯效果)的几种方法)

AS3动画效果常用公式

在 cocos2d 中停止 Sprite 动画

Sprite 按钮和图标悬停动画

shader 动画之旗子/水纹波浪 !Cocos Creator !

Simple2D-24 Sprite 渲染树