工程下载:https://files.cnblogs.com/files/sanyejun/ComboAttack.7z

全网也没查到比较好的资料,自己弄了个

一共是3个脚本

先上图

 

 黑色为触发条件

绿色和红色为2个动画Behaviour脚本

注意:attack01  attack02    attack03  ——> idle  的has exit time 需要勾选上,其他的都不用

然后attack01 可以连到 attack02 , attack02 可以连到 attack03

那么attack01 和 attack02  需要在动画转折的地方添加动画事件

一个动作

【1.起手】--------------【2.攻击】--------------【3.准备收招转idle】---------------【4.转idle】

那么在 3 这个时间点,添加动画事件,如果可以连击,进入下一个攻击动作,没有的话则进入idle

添加事件:ComboCheck   参数:Int  如果需要2下进下个动作则填 2,   3下则填3

我们这里的attack01 填参数2     attack03填参数3

 

 脚本:

挂人物身上的

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class ComboAttack : MonoBehaviour

{

public Animator anim;

public int clickNum = 0;

private float lastClickedTime = 0;

//2下连击之间按键的最长延迟

public float maxComboDelay = 0.9f;

private static readonly int AttackCombo = Animator.StringToHash("attackCombo");

// Start is called before the first frame update

void Start()

{

anim = GetComponent();

}

// Update is called once per frame

void Update()

{

if (Time.time - lastClickedTime > maxComboDelay)

{

clickNum = 0;

}

if (Input.GetMouseButtonDown(0))

{

lastClickedTime = Time.time;

clickNum++;

if (clickNum == 1)

{

anim.SetBool(AttackCombo, true);

}

clickNum = Mathf.Clamp(clickNum, 0, 3);

}

}

public void ComboCheck(int num)

{

if (clickNum >= num)

{

anim.SetBool(AttackCombo, true);

}

}

public void ClearComboClickNum()

{

clickNum = 0;

}

}

 

动画的Behaviour

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class AttackComboNumClear : StateMachineBehaviour

{

// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)

{

animator.GetComponent().ClearComboClickNum();

}

}

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class AttackComboBehaviour : StateMachineBehaviour

{

private static readonly int Attack = Animator.StringToHash("attackCombo");

// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state

override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)

{

animator.SetBool(Attack, false);

}

}

 

好文推荐

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。