和倩女幽魂2五连击击是怎样实现的

29141人阅读
Unity3D开发(8)
Unity3D 4.x 版本之后提供了一种新的动画机制Mecanim,虽然目前还支持之前的Animation,但看到Unity3D 4.3&预览版里Sprite的动画也是基于Animator的,可知Mecanim将会是以后动画播放的趋势!
Mecanim是一种基于状态机的结构,不同的状态表示一个动作(或者多个动作融合,或者一个子状态机),状态之间使用一种称为Transition的组件关联,Transition中可以设定一些条件,当在Transition“源状态”下,满足其条件之后,将自动跳转到Transition“目的状态”!(具体用法请参照Unity3D手册)
在一些ARPG的游戏中,比如 端游的DNF和闯关类的街机游戏,连续按攻击键都会触发一套组合攻击,在这个过程中敌人一般是硬直状态的,而且组合攻击的最后一下一般是重击,这样做既增加了连击带来的爽快感,又促使玩家在攻击时采取一定的攻击策略!
Mecanim的状态机设计就很方便的使开发者实现了这一效果!
<span style="font-size:14 color:#.动画状态机
这里只用4个动作描述,待命状态(Idle),攻击1状态(AtkSlice),攻击2状态(AtkStab),攻击3状态(AtkCleave),3个攻击状态分别表示连续按下“普通攻击键”时触发的状态,是有先后顺序关系的,即如果在待命状态下按下“攻击键”,则进入攻击1状态;如果在攻击1状态下继续按下“攻击键”,则进入攻击2状态,如果不按下“攻击键”,则回到待命状态;攻击2状态到攻击3状态同理;攻击3状态认为是重击,即连击结束,回到待命状态!
状态图如下
我希望能以最少的代码和设置完成这个功能,所以只添加了一个状态机参数 ActionCMD,假设 ActionCMD = 1 为进入攻击状态参数
(1)在任意3种攻击状态下,不再继续按下“攻击键”,则回到待命状态,即上图 3条白色Transition
(2)在待命,攻击1,攻击2状态下,继续按下“攻击键”,则跳转到连击状态(即下一个攻击状态),即上图3条蓝色Transition
<span style="font-size:14 color:#.代码实现
(1)状态机设置完成之后,要做的就是在代码中完成对当前状态的判断,以及对状态参数的设置,用以完成动画状态机的切换!
// 使用字符串变量保存当前状态,避免多处引用写错
private static readonly string IdleState = &BaseLayer.Idle&;
private static readonly string AtkSliceState = &BaseLayer.AtkSlice&;
private static readonly string AtkStabState = &BaseLayer.AtkStab&;
private static readonly string AtkCleave = &BaseLayer.AtkCleave&;
// 动画状态机参数Key
private static readonly string ActionCMD = &ActionCMD&;
private Animator animator =
// 当前连击数(即 玩家按下攻击键的次数)
private int curComboCount = 0;
(2)在Start() 中获取Animator组件引用
(3)在Update() 中根据当前状态和输入参数促使状态切换
void Update()
AnimatorStateInfo stateInfo = this.animator.GetCurrentAnimatorStateInfo(0);
if (!stateInfo.IsName(IdleState))
// 每次设置完参数之后,都应该在下一帧开始时将参数设置清空,避免连续切换
this.animator.SetInteger(ActionCMD, 0);
if (stateInfo.IsName(AtkSliceState) && (stateInfo.normalizedTime & 0.6f) && (this.curComboCount == 2))
// 当在攻击1状态下,并且当前状态运行了0.6正交化时间(即动作时长的60%),并且用户在攻击1状态下又按下了“攻击键”
this.animator.SetInteger(ActionCMD, 1);
if (stateInfo.IsName(AtkStabState) && (stateInfo.normalizedTime & 0.8f) && (this.curComboCount == 3))
// 挡在攻击2状态下(同理攻击1状态)
this.animator.SetInteger(ActionCMD, 1);
if (Input.GetKeyUp(KeyCode.J))
// 监听用户输入(假设J键为攻击键)
void Attack()
AnimatorStateInfo stateInfo = this.animator.GetCurrentAnimatorStateInfo(0);
if (stateInfo.IsName(IdleState))
// 在待命状态下,按下攻击键,进入攻击1状态,并记录连击数为1
this.animator.SetInteger(ActionCMD, 1);
this.curComboCount = 1;
else if (stateInfo.IsName(AtkSliceState))
// 在攻击1状态下,按下攻击键,记录连击数为2(切换状态在Update()中)
this.curComboCount = 2;
else if (stateInfo.IsName(AtkStabState))
// 在攻击2状态下,按下攻击键,记录连击数为3(切换状态在Update()中)
this.curComboCount = 3;
这里需要注意的是,在Update() 中使用的0.6和0.8 应该分别小于当前状态跳转到待命状态的参数Exit Time(这个时间也是正交化的)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:847207次
积分:8000
积分:8000
排名:第1962名
原创:70篇
转载:23篇
评论:399条
阅读:215781
文章:27篇
阅读:363454
(3)(1)(3)(2)(1)(5)(1)(2)(4)(3)(2)(5)(4)(4)(5)(5)(6)(4)(2)(8)(2)(1)(2)(3)(6)(2)(1)(1)(2)(3)当前位置:&&&&&&&&&&&& 《死或生5》连招心得攻略《死或生5》连招心得攻略
  《》虽然是满街尽是萌妹子的游戏,但其中操作特性一点都不会少哦。其中按键连招可是说是此款游戏的操作难点。接下来分享一下《死或生5》连招心得攻略。  这个游戏速度很快,对反应要求很高,而心态更重要。  好的心态可以让你把握住节奏。有的连招不止需要手速,更需要节奏。  用Kasumi做例子  比如Kasumi的连招之一会心炸裂连段。  起手的→→P。之后接续的→→KK 就一定要在出拳后快速输入,否则就算打出也不算连击。  但随后的↘P可以稍作停顿后再输入,过急就会可能变成其他招式。  再比如反击衍生连段。  反击之后需要Kasumi向前→→冲刺,才能打得到后续的K。但→→冲刺不能按住,否则变成其他招式。  同样的威力爆射连段。  挑空对手后,接续的K得把握好对手在空中的位置。否则就算接续一次也无法接续后面其他连技。  心态重要。所以得适当放松,失败几次后放下手柄,活动活动,然后再挑战。  另外人物左右位置也可以适当调整。有的人也许更适合Player2的位置,就是人物面朝左 ←←来冲刺的位置。  最后如果你觉得自己喜欢的某人物总也打不好。由于自己的反射弧不够短,就认为自己不适合FTG格斗类游戏,那或许你可以试试其他人物。  因为人物都有各自的节奏。找到适合自己的节奏的人物才是幸运的。打出适合自己的打法才能发挥自己真正的实力。反应慢也可以用防反,保持距离以静制动等等,这些需要自己去尝试。
相关攻略 18:05 17:47 17:41 15:11 15:05 14:53
手机游戏推荐
相关问答相关补丁
本类最新更新 12345678910
热门动作角色扮演推荐星级:推荐星级:推荐星级:推荐星级:推荐星级:

我要回帖

更多关于 不知火舞五连击 的文章

 

随机推荐