欢迎光临散文网 会员登陆 & 注册

关于角色攻击的解决

2023-02-22 18:44 作者:WonderFF1  | 我要投稿

        

        角色攻击功能一直是RPG游戏的核心玩法,首先是攻击连击次数的设计,我的角色可以使用三次连击,但是为了实现“连续”攻击的效果,需要玩家在固定的时间内完成这三次攻击,才能使得连击能够流畅。我需要为攻击设置几个基本参数,分别是连击完成的时间(Interval)、连击次数(comboStep)、是否正在攻击(isAttack)、是否正在播放攻击动画(isPlaying)、攻击类型(attackType)、附加速度(attackSpeed)。Interval参数就是这三次连击的最长完成时间,如果不能在这个时间内完成三连击,则会从Attack1重新开始;comboStep参数是记录攻击次数,区分Attack123,用以播放不同的动画和产生不同的效果;isAttack参数是检测玩家攻击的参数,为真则表示正在攻击,玩家连击需要在上次攻击的后半程再按攻击,如果在前半程就能攻击则会打断攻击,如果在动画播放末尾才能攻击则会使得连击不流畅,这也是常说的预输入机制;isPlaying参数是检测动画是否正在播放的参数,为真则表示动画正在播放,因为玩家攻击会有一个向前的附加速度且攻击时不能随意移动,所以设置这个参数是为了使得攻击动画仍在播放时,虽然能预输入下一次攻击,但是不能随意移动;attackType参数记录了攻击类型,有普通攻击和跳跃攻击;attackSpeed参数是攻击的附加速度,玩家的攻击会击退敌人,为了防止连击无法连续命中,需要附加一个向前的速度。

以下是具体代码和攻击流程。

 一次完整攻击的示意图

void Update()

    {

        if (isAttack)

            isPlaying = true;

        Attack();

    }

void Attack()//攻击

    {

        if (Input.GetButtonDown("Attack") && !isAttack)

        {

            isPlaying = true;

            isAttack = true;

            attackType = "normal";

            comboStep++;

            if (comboStep > 3)

                comboStep = 1;

            timer = interval;

            anim.SetTrigger("normalAttack");

            anim.SetInteger("comboStep", comboStep);

        }

        else if (Input.GetButtonDown("Attack"))

        {

            isPlaying = true;

            isAttack = true;

            attackType = "air";

            anim.SetTrigger("airAttack");

            timer = 0;

        }

        if (timer != 0)

        {

            timer -= Time.deltaTime;

            if (timer <= 0)

            {

                timer = 0;

                comboStep = 0;

            }

        }

    }

 

    public void AttackOver()//攻击结束

    {

        isAttack = false;

    }

 

    public void AnimPlayingOver()//动画结束

    {

        isPlaying = false;

    }

}

        这样通过代码和动画系统的配合,玩家就能实现较为流畅的连击了。本人做到这一步已经基本解决攻击手感问题,在此仅仅提供一种基本方案,故没有进行下一步研究改进。


关于角色攻击的解决的评论 (共 条)

分享到微博请遵守国家法律