关于角色攻击的解决
角色攻击功能一直是RPG游戏的核心玩法,首先是攻击连击次数的设计,我的角色可以使用三次连击,但是为了实现“连续”攻击的效果,需要玩家在固定的时间内完成这三次攻击,才能使得连击能够流畅。我需要为攻击设置几个基本参数,分别是连击完成的时间(Interval)、连击次数(comboStep)、是否正在攻击(isAttack)、是否正在播放攻击动画(isPlaying)、攻击类型(attackType)、附加速度(attackSpeed)。Interval参数就是这三次连击的最长完成时间,如果不能在这个时间内完成三连击,则会从Attack1重新开始;comboStep参数是记录攻击次数,区分Attack1、2和3,用以播放不同的动画和产生不同的效果;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;
}
}
这样通过代码和动画系统的配合,玩家就能实现较为流畅的连击了。本人做到这一步已经基本解决攻击手感问题,在此仅仅提供一种基本方案,故没有进行下一步研究改进。