通过按鼠标左键来实现。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 在每一个攻击技能中的clip中都添加一个这个脚本里的时间CombosCheck
/// 通过检查在每一个clip末尾是用户按下了几次mousebutton,来增加countclick数
/// 根据countclick数与当前状态数如果为一致说明用户并未多按下按钮,则中断连击返回idle
/// 若此时用户按下的按钮已经多余此时的状态数,则跳转到下一状态,在下一状态的时候继续检测
/// 通过使用遮罩层的方式来解决无法边行走边攻击的问题
/// 新增一个layer:attack , 附加一个只有下半身的mask , 使用这一层layer1来进行combos的判断
/// </summary>
public class AttackCombos : MonoBehaviour {
private Animator anim;
private int CountClick;
private bool canClick;
// Use this for initialization
void Start () {
canClick = true;
CountClick = 0;
anim = GetComponent<Animator>();
}
private void Update()
{
if (Input.GetMouseButtonDown(0)) combosStart();
}
private void combosStart()
{
if(canClick)
{
CountClick++;
}
if (CountClick==1)
{
anim.SetInteger("Punching",1);
}
}
public void CombosCheck()
{
canClick = false;
if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack01") &&CountClick==1)
{
canClick = true;
anim.SetInteger("Punching", 0);
CountClick = 0;
return;
}
else if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack01") &&CountClick>=2)
{
canClick = true;
anim.SetInteger("Punching", 2);
return;
}
else if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack02") &&CountClick==2)
{
canClick = true;
anim.SetInteger("Punching", 0);
CountClick = 0;
return;
}else if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack02") &&CountClick>=3)
{
canClick = true;
anim.SetInteger("Punching", 3);
return;
}
else if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack03") &&CountClick==3)
{
CountClick = 0;
canClick = true;
anim.SetInteger("Punching", 0);
return;
}else if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack03") &&CountClick>=4)
{
canClick = true;
anim.SetInteger("Punching", 4);
return;
}
else if (anim.GetCurrentAnimatorStateInfo(1).IsName("attack04"))
{
canClick = true;
anim.SetInteger("Punching", 0);
CountClick = 0;
return;
}
}
}