關(guān)于角色攻擊的解決
????????
????????角色攻擊功能一直是RPG游戲的核心玩法,首先是攻擊連擊次數(shù)的設(shè)計(jì),我的角色可以使用三次連擊,但是為了實(shí)現(xiàn)“連續(xù)”攻擊的效果,需要玩家在固定的時(shí)間內(nèi)完成這三次攻擊,才能使得連擊能夠流暢。我需要為攻擊設(shè)置幾個(gè)基本參數(shù),分別是連擊完成的時(shí)間(Interval)、連擊次數(shù)(comboStep)、是否正在攻擊(isAttack)、是否正在播放攻擊動(dòng)畫(huà)(isPlaying)、攻擊類(lèi)型(attackType)、附加速度(attackSpeed)。Interval參數(shù)就是這三次連擊的最長(zhǎng)完成時(shí)間,如果不能在這個(gè)時(shí)間內(nèi)完成三連擊,則會(huì)從Attack1重新開(kāi)始;comboStep參數(shù)是記錄攻擊次數(shù),區(qū)分Attack1、2和3,用以播放不同的動(dòng)畫(huà)和產(chǎn)生不同的效果;isAttack參數(shù)是檢測(cè)玩家攻擊的參數(shù),為真則表示正在攻擊,玩家連擊需要在上次攻擊的后半程再按攻擊,如果在前半程就能攻擊則會(huì)打斷攻擊,如果在動(dòng)畫(huà)播放末尾才能攻擊則會(huì)使得連擊不流暢,這也是常說(shuō)的預(yù)輸入機(jī)制;isPlaying參數(shù)是檢測(cè)動(dòng)畫(huà)是否正在播放的參數(shù),為真則表示動(dòng)畫(huà)正在播放,因?yàn)橥婕夜魰?huì)有一個(gè)向前的附加速度且攻擊時(shí)不能隨意移動(dòng),所以設(shè)置這個(gè)參數(shù)是為了使得攻擊動(dòng)畫(huà)仍在播放時(shí),雖然能預(yù)輸入下一次攻擊,但是不能隨意移動(dòng);attackType參數(shù)記錄了攻擊類(lèi)型,有普通攻擊和跳躍攻擊;attackSpeed參數(shù)是攻擊的附加速度,玩家的攻擊會(huì)擊退敵人,為了防止連擊無(wú)法連續(xù)命中,需要附加一個(gè)向前的速度。
以下是具體代碼和攻擊流程。

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()//攻擊結(jié)束
??? {
??????? isAttack = false;
??? }
?
??? public void AnimPlayingOver()//動(dòng)畫(huà)結(jié)束
??? {
??????? isPlaying = false;
??? }
}
????????這樣通過(guò)代碼和動(dòng)畫(huà)系統(tǒng)的配合,玩家就能實(shí)現(xiàn)較為流暢的連擊了。本人做到這一步已經(jīng)基本解決攻擊手感問(wèn)題,在此僅僅提供一種基本方案,故沒(méi)有進(jìn)行下一步研究改進(jìn)。