游戏代码开发日志004 - 移动动画优化 - 停止缓冲与方向转换

目录

1.如何绘制逐帧动画

2.建议使用VSCode写Unity代码吗?

3.优化移动停止缓冲帧

4.缓冲帧效果展示

5.添加方向转换动画

6.方向转换动画效果展示


1.如何绘制逐帧动画

简单讲讲我是如何绘画游戏用的角色逐帧动画的。为了让游戏开发的经历显得更完整,细枝末节的记录是必要的。

首先,我在开始绘画前已经确定好了基本移动动画需要行走[过渡]与行走[循环]两类动画,总共分别是5帧与13帧。

行走[过渡]的5帧(01234)事实上意味着中间存在4个时间间隔(0-1,1-2,2-3,3-4),也就是1/3个一拍二,使用时更契合常用播放速度。但并不是出于便于调整,而是因为共画5帧是可以达成最简单的动画效果的。即先画起始帧和结束帧,然后是第一中间帧,最后是两个第二中间帧。

行走[循环]同理,存在12个时间间隔,即一拍二。

当然,你看到了,最终我并没有将图片们导出为GIF然后扔进Unity里,我使用的是一种全新的移动控制方式。

2.建议使用VSCode写Unity代码吗?

不建议用VSCode写Unity代码而建议使用Visual Studio。

VSCode不是IDE,没有自编译功能,每次使用VSCode改好代码必须先回到Unity才会编译,约算下来大概每次都会比Visual Studio多加载1-3秒。即使每次第一次打开Unity再打开代码编写软件时VSCode总是会比Visual Studio快5-10秒。

所以,请务必不要贪小失大。

3.优化移动停止缓冲帧

花了几天时间优化了一下位移动画,并绘制了新的移动缓冲动画,以及方向转换动画。也许我在急于完成角色动画,以尽快投入到剧情的编写中。

MoveStatus从00-15共有16张,我将其分为C00,C06,C03&C09三组。

在T00/T01/T02/T03/C00/C01/C15缓冲帧使用C00组,共7张,使用4帧;

C05/C06/C07缓冲帧使用C06组,共3张,使用3帧;

C02/C03/C04/C08/C09/C10缓冲帧使用C03&C09组,共6张,使用4帧。

以上C05与C06即MS09与MS10。

4.缓冲帧效果展示

缓冲帧输出速度是否过快,未来可能会调整吗。

5.添加方向转换动画

首先,我们做好准备,Sprite[] Overturn用于存储动画图片集;

coldTimeOverturn老样子,用来计时跳转至下一张图片的;

MoveInLimitationFlag的设立是为了在播放方向转换动画时禁止移动;

FaceToLeft和FaceToRight不用解释吧,它们会在PlayerMoveLeft()与PlayerMoveRight()里被设置参数。

初步构想的结构大概是这个样子,但是我发现在第一次按D时就卡死了无法移动,出于PlayerFaceRightToLeft()与PlayerFaceLeftToRight()都是在Input.GetKey(KeyCode.X)即按键持续按下的前提下进行调用的,而第一次调用会立即赋值MoveInLimitationFlag = false,让Input.GetKey(KeyCode.X)失去大前提。

所以我的想法是,在Update()里添加一个方向转换专用函数,通过检测两个信号来达成PlayerFaceRightToLeft()或PlayerFaceLeftToRight()两种效果,并在函数的末尾赋值MoveInLimitationFlag = true;

但还是出现了一个小问题,那就是在播放旋转第一帧即Overturn[00]的时候会出现一帧反方向的静止帧。

原来是因为在coldTimeOverturn大于0小于0.1的时候没有属于自己的插入动画,但此时MoveAnimation.flipX已经改变了,所以在0-0.1这个时间空隙内,此时的状态已经从正面静止帧切换至背面了。所以最好的解决方法是,我需要那张未使用的第一帧静止帧初始站立图片,在顺移其它的Overturn[xx]一位后将它拖至Overturn[00]。

再次出现问题,转换帧无差误,但是长按A或D直到翻转完毕后的第一帧位移却会出现一帧反方向静止帧。但是在按一次A或D等待翻转完毕后则不会出现反方向静止帧,当然,再按一次A或D就会出现反方向静止帧。

原因是出于在PlayerFaceLeftToRight()或PlayerFaceRightToLeft()中在方向翻转时已经为MoveAnimation.flipX设置了一个相反的参数,以至于在普通位移帧MoveStatus == 0时的coldTime在计时0-0.1区间内会出现一个相反的静止帧。解决方法是,为PlayerMoveXX()函数的MoveStatus == 0判断内coldTime的0-0.1区间内添加一个静止帧,以免位移动画出现帧空缺并受到其它动画的干扰。

6.方向转换动画效果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值