unity人物攻击类

点击按钮播放人物动画  实现三连击效果

public class PlayerAttack : MonoBehaviour

{
    // Use this for initialization
    private ETCButton normalBtn;
    private ETCButton attackBtn;
    private ETCButton rangeBtn;
    private ETCButton jumpBtn;

    private Animator ani;

    public float attackBValue;
    public float rangeValue;  //范围攻击的攻击力
    public float attackAValue;
    public float combo_2Value;
    public float combo_3Value;
    private void Awake()
    {
        attackBValue = 20;
        rangeValue = 15;

        attackAValue = 18;
        combo_2Value = 10;
        combo_3Value = 10;
        ani = this.GetComponent<Animator>();
    }
    void Start()
    {
        normalBtn = ETCInput.GetControlButton("normalBtn");
        normalBtn.onDown.AddListener(normalBtnDown);
        attackBtn = ETCInput.GetControlButton("attackBtn");
        attackBtn.onDown.AddListener(attackBtnDown);
        rangeBtn = ETCInput.GetControlButton("rangeBtn");
        rangeBtn.onDown.AddListener(rangeBtnDown);

    }

    private void rangeBtnDown()
    {
        if (ani != null)
            ani.SetTrigger("range");
    }

    private void attackBtnDown()
    {
        if (ani != null)
            ani.SetTrigger("attackB");
    }

 

    private void normalBtnDown()
    {

        AnimatorStateInfo stateinfo = ani.GetCurrentAnimatorStateInfo(0);
        if (stateinfo.IsName("Idle"))
        {
            ani.SetTrigger("attackA");
        }  ///AttackA动画播放到一半以上了。  整数部分为播放次数,小数部分为播放的百分比。
        else if (stateinfo.IsName("AttackA") && stateinfo.normalizedTime % 1 > 0.5f)
        {
            ani.SetTrigger("combo_2");
        }
        else if (stateinfo.IsName("Combo_2") && stateinfo.normalizedTime % 1 > 0.5f)
        {
            ani.SetTrigger("combo_3");
        }

    }

    /// <summary>
    /// 动画事件 的回调函数。
    /// </summary>
    public void attackB()
    {
        ///单体攻击、前方、在攻击范围之内的第一个。
        List<GameObject> list = SpawnEnemy.Instance.EnemyList;
      //  GameObject tmp = null;
       // tmp = list[0];  ///距离最小的敌人游戏队形
        foreach (GameObject item in list)
        {
            //判断是不是在前方
            float dot = Vector3.Dot(this.transform.forward, (item.transform.position - this.transform.position));
            if (dot > 0)  //前方
            {
                float dis = Vector3.Distance(item.transform.position, this.transform.position);
                if (dis < G.AttackRange) //小于攻击范围
                {
                    //  float d = Vector3.Distance(tmp.transform.position, this.transform.position);
                    //if (dis < d)
                    //{
                    //    tmp = item;
                    //}
                    item.GetComponent<TakeDamage>().damage(attackBValue);
                    break;
                }
            }

        }

       
 
    }

    public void RangeAttack()
    {
        ///范围攻击  前方二米范围内所有敌人
        List<GameObject> list = SpawnEnemy.Instance.EnemyList;
 
        foreach (GameObject item in list)
        {
            //判断是不是在前方
            float dot = Vector3.Dot(this.transform.forward, (item.transform.position - this.transform.position));
            if (dot > 0)  //前方
            {
                float dis = Vector3.Distance(item.transform.position, this.transform.position);
                if (dis < G.AttackRange) //小于攻击范围
                {
                    item.GetComponent<TakeDamage>().damage(rangeValue);
                }
            }

        }
    }

    public void Combo_2()
    {
        ///单体,  前方二米范围内所有敌人
        List<GameObject> list = SpawnEnemy.Instance.EnemyList;

        foreach (GameObject item in list)
        {
            //判断是不是在前方
            float dot = Vector3.Dot(this.transform.forward, (item.transform.position - this.transform.position));
            if (dot > 0)  //前方
            {
                float dis = Vector3.Distance(item.transform.position, this.transform.position);
                if (dis < G.AttackRange) //小于攻击范围
                {
                    item.GetComponent<TakeDamage>().damage(combo_2Value);
                    break;
                }
            }

        }
    }


    public void Combo_3()
    {
        ///范围攻击  前方二米范围内所有敌人
        List<GameObject> list = SpawnEnemy.Instance.EnemyList;

        foreach (GameObject item in list)
        {
            //判断是不是在前方
            float dot = Vector3.Dot(this.transform.forward, (item.transform.position - this.transform.position));
            if (dot > 0)  //前方
            {
                float dis = Vector3.Distance(item.transform.position, this.transform.position);
                if (dis < G.AttackRange) //小于攻击范围
                {
                    item.GetComponent<TakeDamage>().damage(combo_3Value);
                }
            }

        }
    }


    public void AttackA()
    {
        ///单体攻击  前方二米范围内所有敌人
        List<GameObject> list = SpawnEnemy.Instance.EnemyList;

        foreach (GameObject item in list)
        {
            //判断是不是在前方
            float dot = Vector3.Dot(this.transform.forward, (item.transform.position - this.transform.position));
            if (dot > 0)  //前方
            {
                float dis = Vector3.Distance(item.transform.position, this.transform.position);
                if (dis < G.AttackRange) //小于攻击范围
                {
                    item.GetComponent<TakeDamage>().damage(combo_3Value);
                    break;
                }
            }

        }
    }

    // Update is called once per frame
    void Update()
    {

        //AnimatorStateInfo stateinfo = ani.GetCurrentAnimatorStateInfo(0);

        //if (stateinfo.IsName("Idle"))
        //{
        //    print("idle" + stateinfo.normalizedTime); ///
        //}
        //  print(ani.IsInTransition(0));
    }


}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值