【学习笔记】2D帧动画

   在 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;
				} 
	}
}

         上面代码实现帧动画的原理是这样的,设定每秒播放10帧的动画,计算出每帧动画需要的间隔时间,然后用计时器计算时间,当timer大于时间间隔的时候,我们将索引index加1,代码中的IdleUpIndex%=IndleUpLength意思是判断当前索引是否超出图片的长度,如果超过,就将索引置为0,重新开始循环,这样就实现了动画的播放效果。

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值