unity - 实现人物边行走边连击的功能

通过按鼠标左键来实现。

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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Icecoldless/article/details/81878095
今日推荐