在 2D游戏开发中,帧动画的使用是必不可少的。那么,今天就留下点笔迹,留作自己复习,也希望对看到博客的童鞋有帮助。。。。
————————————————————————————————————————————————————————————————————————华丽的分割
在2D游戏中,实现物体的动画,实际就是利用的帧动画,比如在2d飞机大战的飞机螺旋桨的转动,射击游戏中的任务跑和蹲下等等等。实现帧动画,首先需要知道什么是帧动画,说的直白一点就是一帧一阵播放的动画。。。。那么如何实现帧动画呢?!首先我们需要一套完整的动画图集,这个网上资源也挺多的。这里我就利用最近做的一个小游戏的素材来演示。
这里用到一套图,实现任务角色的Idle和Walk下的动画。首先我们需要选择图片,把图片的Texture Type属性设置成为Sprite(2D/uGUI)图片精灵的形式。
然后那,我们选择其中Idle下的上半身和半身的图片即01和foot01,在Scene视图中拼凑成一个完整的任务形象。
OK,现在我们选择上半身图片。
现在我们只需要用代码来实现Sprite的改变,就可以实现动画的播放了。。。。嚯嚯嚯、、、、、、
建立一个空的GameObject,命名为PlayGround,然后将这个两个图片拖动到其下,接着在PlayGround下建立脚本。。
public enum AnimStatus{
Idle,
Walk
}
public class PlayerGround : MonoBehaviour {
public AnimStatus status=AnimStatus.Idle;//设定当前状态
public float animFps=10;//每秒10帧
private float animTimeInterval;//每帧时间间隔
private float timer=0;//计时器
//-------------Idle状态下,上半身
public SpriteRenderer UpRenderer;//获取上半身渲染器
public Sprite[] UpSpriteArray;//得到帧动画资源
private int IdleUpLength;//帧动画长度
private int IdleUpIndex=0;//索引
//-----------Idle状态下,下半身
public Sprite DownSprite;
public SpriteRenderer DownRenderer;
//----------Walk状态下,上半身
public SpriteRenderer UpWalkRenderer;//获取上半身渲染器
public Sprite[] UpWalkSpriteArray;//得到帧动画资源
private int UpWalkLength;//帧动画长度
private int UpWalkIndex=0;//索引
//---------Walk状态下,下半身
public SpriteRenderer DownWalkRenderer;//获取下半身渲染器
public Sprite[] DownWalkSpriteArray;//得到帧动画资源
private int DownWalkLength;//帧动画长度
private int DownWalkIndex=0;//索引
// Use this for initialization
void Start () {
animTimeInterval = 1 / animFps;
IdleUpLength = UpSpriteArray.Length;
UpWalkLength =UpWalkSpriteArray.Length;
DownWalkLength = DownWalkSpriteArray.Length;
}
// Update is called once per frame
void Update () {
switch (status) {
case AnimStatus.Idle:
timer += Time.deltaTime;
if(timer>animTimeInterval)
{
timer-=animTimeInterval;
IdleUpIndex++;
IdleUpIndex%=IdleUpLength;
UpRenderer.sprite=UpSpriteArray[IdleUpIndex];
DownRenderer.sprite=DownSprite;
}
break;
case AnimStatus.Walk:
timer += Time.deltaTime;
if(timer>animTimeInterval)
{
timer-=animTimeInterval;
UpWalkIndex++;
UpWalkIndex%=UpWalkLength;
UpWalkRenderer.sprite=UpWalkSpriteArray[UpWalkIndex];
DownWalkIndex++;
DownWalkIndex%=DownWalkLength;
DownWalkRenderer.sprite=DownWalkSpriteArray[DownWalkIndex];
}
break;
}
}
}