您的位置:首页 > 移动开发 > Unity3D

Unity简单的实现动画三连击脚本

2016-01-27 20:05 746 查看

思路讲解

三连击动作动画状态转换关系如下

(1)Idle->Attack1->Idle

(2)Idle->Attack1->Attack2->Idle

(3)Idle->Attack1->Attack2->Attack3->Idle

很容易理解,实现上述动画状态转换即完成了三连击。

本次才用Animator Controller来实现上述转换。

具体实现

首先介绍一下normalizedTime

这个是animator的属性 其value的小数部分代表播放动画的完成度,及播放了百分之几的动画。

其次在介绍状态结束后冲突



例如现在为状态1,当两条线路条件同时满足该如何选择,是转到状态2,还是沿另一条线转向idle。

再来看下这幅图



看到那个84%了吗 可以通过用鼠标点击向右的三角,显示拖动改变。即第一个动画进行到84%,第二个动画开始。



同理这个是90%,可以理解了吧。

这是状态1向两个状态转换,若条件同时成立转向小的,即84%。

所以把非转向idle的值调小些即可。

条件设置用一个interger attack 和 trigger attack1来控制。

第一个条件为 触发attack1(注意没有等于)

第二个条件为 attack=2

第三个条件为 attack=3

以上为连击顺序,返回idle状态的条件为无;

anim.SetInteger(“attack”,1);

这并不直接控制状态只是起一个防止第二攻击动画自动播放,所以要设置一个非2的值,本次设为1。

static int attack1State = Animator.StringToHash("Base Layer.attack1.1");
static int attack2State = Animator.StringToHash("Base Layer.attack1.2");
static int attack3State = Animator.StringToHash("Base Layer.attack1.3");

void Attack1()
{
if( currentBaseState.fullPathHash == idleState)
{
if (!anim.IsInTransition(0))
{
anim.SetTrigger("attack1");
anim.SetInteger("attack",1);
}
}
else if(currentBaseState.fullPathHash==attack1State && currentBaseState.normalizedTime>0.5)
{
anim.SetInteger("attack", 2);
}
else if (currentBaseState.fullPathHash == attack2State && currentBaseState.normalizedTime > 0.5)
{
anim.SetInteger("attack", 3);
}
else if (currentBaseState.fullPathHash==attack3State)
{
print("PL**************************************PL");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity 动画连招 脚本