三段攻击逻辑
基本逻辑:
人物点击攻击按钮进入攻击状态(bool isAttack)
在攻击状态下,
一旦设置的触发器(trigger attack)被触发,设置的计数器(int combo)查看目前攻击次数,如果>0,播放一段攻击;>1,二段攻击;>2,三段攻击。
对动画exit time的设置:
如果 AnimatorStateTransition.hasExitTime 为 true,则 exitTime 表示过渡可以生效的准确时间。\ 这是以标准化时间表示的,因此,举例来说,退出时间 0.75 意味着在第一帧上如果已播放了 75% 的动画,Exit Time 条件就会为 true。
也就是说,exit time设置为90%后,一旦在某段攻击动画播放超过90%后,就满足进入exit time的条件,此时再次点击攻击按钮是无法combo的。
也就是也就是说,只有在某段攻击动画播放0-90%的阶段点击攻击按钮才能触发combo。
同时需要设置如果exut time到了1,进入到exit状态,退出attack层的动画。
ps 但是由于三段攻击的时间都很短,特别是第二段攻击,很难达到combo的条件,所以最后去掉了对combo计数的判断
整体攻击逻辑变成进入攻击状态,0.9个动作内点击攻击,触发器被触发,进入下一个攻击状态
状态转换条件
//最终删除combo相关部分
1.进入攻击(1段)
2.combo条件的达成
3.没有及时按下攻击键导致退出攻击动画
按键绑定及代码
1.按键绑定
2.playerController代码
public bool isAttack;
private void Awake()
{
//attack事件注册
inputControl.Gameplay.Attack.started += PlayerAttack;
}
private void PlayerAttack(InputAction.CallbackContext context)
{
//按键点击后进入攻击状态
isAttack = true;
//触发器的触发
playerAnimation.PlayerAttack();
}
3.animation数据的链接
void Update()
{
SetAnimation();
}
public void SetAnimation()
{
anim.SetBool("isAttack", playerController.isAttack);
}
public void PlayerAttack()
{
anim.SetTrigger("attack");
}