ACT游戏核心—内在逻辑的实现(二)
本文首发Gad-腾讯游戏开发者平台,转载请获得作者授权。
ACT游戏核心—内在逻辑的实现(二)
上篇索引:ACT游戏核心—内在逻辑的实现(一)
http://gad.qq.com/article/detail/7157722
打击的实现-击退与击飞
当一个角色被击中时,一般普通的情况下分为两种不同的结果,击退和击飞,我们这一次将会基于这两个基础动作来谈一谈具体实现的方法。
击退
角色被击退时,会播放一段对应的击退动画并后退一段距离。
其中击退动作的资源2D与3D的区别都并不是太大,相比起来2D游戏的动作帧数可能比3D的更少一些,2D世界中的角色的击退是一个1~3帧的动画,3D的世界中角色的击退动作是一段连续的骨骼动画,但是就其根本性质而言区别不是特别大。所以这里关于击退动画我们暂且一笔带过。
但是,其中需要注意的是,当角色被击退时后退的距离不同的制作者有不同的做法,一般来说分为以下以下三种:
1:采用固定的击退动画,直接把角色的击退动作的后退距离做在动画之中,这样的话更适合一些不是那么重度的ACT游戏,更加简单省事,坏处即使你如果触发击退的时候,给角色只能退这么远,而且固定一样速度。
2:采用原地动画,随后在程序中添加位移,这种做法的距离方法时,在动作制作人员在动作制作完成之后,删除其中动作的位移信息(PS:为什么不在一开始制作时就删除,这是因为骨骼动作在制作时有位移才能看出动画的问题,所以一般在制作时后会有位移的配合,否则在最终添加位移之后动作会扭曲变形不自然),随后动画人员将废弃的位移信息告知策划&程序进行单独配置。配置的方面有通过二元函数Y=Ax2+Bx,或者通过对动画的每一帧进行KEY帧调试,按我以前的制作方法一般是动作将max中的xyz位移曲线截图给策划,策划照着这个截图在引擎或者工具(例如Unity引擎中的Animator,参照下图)中照抄。不过这方法需要程序的配合,让策划人员可以在该动作的每一帧都能进行单独配置其位移信息才可以。
3:不同距离的击退采用不同动画,这种做法一般在国际AAA大作上有比较多的出现,比如一个普通的盔甲骷髅兵,至少会有往左歪,往右歪两种击退动作,而击飞动作可能会有2~3中,近距离,远距离,中距离,而且每种距离的不同动作都有自己的特色,手部腿部的挥舞,头部的叫喊动作都会有些不同,这种将细节做到极致的方法固然可以将你的游戏品质大大提升,但是这种做法造成的副作用就是包体的大小剧增,APP包可以直接上G。所以除非你游戏中怪物类型很少,比如街霸,KOF97类的格斗游戏一样才可以,如果你真的想要这种效果的话,那最好只在主角身上添加即可,就不要在怪物身上加了。
击飞
击飞时,如果是2D游戏一般会保持一个固定帧或者1~3帧左右的上升,下落,落地等不同动作,与此同时进行抛物线形状的运动,例如DNF,胧村正等2D横版act游戏,一般都会采用此类做法,也就是说在空中飞行的这段过程中,该受到击飞的角色只是一张会移动的静态贴图罢了,例如DNF是在受到击飞攻击的碰撞发生的帧播放一次受击动作随后开始一段单帧的抛物线击飞动画,随后在抛物线触地之后再次进行一个小幅度的抛物线运动,并播放2~5帧左右的触底反弹的动画,随后角色返回站立状态。
而在3D场景中,与2D截然不同的是,3D游戏一般则采用多个连续骨骼动画段落的做法,比如一段完整的击飞动作在空中的飞行,上升,下落,触地,站立每个阶段都是一段完整连续的骨骼动画,不过严格来说,3D也可以使用2D一样通过简单的几帧动画来过渡,但是效果将会相当不好,你都做3D游戏了,还这么省动画干嘛?不过通过简单少量帧数过渡的倒也有,我们这里先按下不谈,只说前一种通过完整动画段落来制作的方法。与2D动画不同的时3D动画资源一般是一个统一的文件件,所以我们在使用此动作资源的时候先要进行动画分割,例如一个3D的击飞动画,有的是分为击飞上升,击飞下落,触地上升,触地下落,起身,有的是分为击飞,触地,起身,而且有些情况下还会对这些资源进行二次利用,怪物在空中二次打飞,这个时候可能就需要再从原先资源中截取一个二次击飞的动画段落,该段落的开始在击飞上升的过程中开始,到触地然后结束。
位移轨迹和比率
在动画分割完成之后,通过上述击退中描述的1,2,3种方案来加入位移,3方案对我们平常实际制作起来不显示,只讨论1,2方案。但是在实际的制作过程中,你还是会发现位移虽然是有了,但是看起来特别的死板,比如角色在打怪物时,根据角色不同的动作幅度的不同,怪物的击退应该是有些距离上的变化看起来才有节奏感,有变化。比如DNF鬼剑士的连突刺技能,使用短剑时为两段伤害,其中第一段伤害怪物的后退距离很近,第二段伤害怪物的后退距离就很远。击飞也是同理,鬼泣5(DMC)中,但丁的斧子形态跳F是把怪物原地击飞,而斧子形态的地面普通攻击第三段是把人斜向前方击飞。
在1,2方案中,这两种击飞应该是同一个击飞动作,不同的位移或者不同的通过XYZ轴关键帧的标记达成,或者通过位移比率达成。前一种方法其实和3方案类似,不过一个通过XYZ轴的关键帧标记达成不同的位移轨迹动画,一个通过制作时动作资源的位移不同达成;而后一种方法则是通过标定位移轨迹后,通过比率压缩拉长XYZ轴的位移比率值,来实现不同距离的位移移动轨迹。这两种方法没有明显的高下之分,在制作时,在“攻击者→攻击→被攻击者”的关系中,这两种方法起始都是绑定在“攻击”这个单元中来实现的。
其他的话
如果想要该效果打击漂亮,自然,有力,需特别需要注意的是需要在动作轨迹上下功夫,所谓细节就是一切,对于ACT游戏来说,怪物飞行的轨迹,速度的变化就是你想要表达的一切,所以对于配置人员来说,必须要对非常了解一般的动画规律,起码要有涉猎,自己做过一些东西才可以,否则只能是竹篮打水一场空,ACT游戏之所以难做,其门槛就在于此,并不是程序实现不了美术不够给力的原因,即使把所有一切资源都摆在你面前,你也无法调配处一个简单有力的击飞效果来。
有些地方不能像我上面所说非黑即白单单只使用一个方案就可以的,一般来说就会复合制作,多个方法并行,在不同条件下使用不同的方案。实现效果的方法有千千万万种,我也不是所有的都了解,只是把我曾经用过的比较有效的方法介绍给大家让大家少走些弯路,大家有疑问的话可以在下方留言询问,我会在(三)中尽力解答。