(M)UNITY三段攻击制作

三段攻击逻辑

基本逻辑:

人物点击攻击按钮进入攻击状态(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段)

(M)UNITY三段攻击制作_第1张图片

2.combo条件的达成

(M)UNITY三段攻击制作_第2张图片

3.没有及时按下攻击键导致退出攻击动画

(M)UNITY三段攻击制作_第3张图片

按键绑定及代码

1.按键绑定

(M)UNITY三段攻击制作_第4张图片
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");
 }

你可能感兴趣的:(unity,游戏引擎)