何柳青
(廣州工商學(xué)院工學(xué)院 廣東省廣州市 510850)
近幾年計(jì)算機(jī)圖形圖像技術(shù)的提升令游戲行業(yè)飛速發(fā)展,游戲公司只要在經(jīng)費(fèi)充足情況下便可開(kāi)發(fā)出高畫(huà)質(zhì)的游戲。然而在游戲畫(huà)質(zhì)同質(zhì)化的懷況下,游戲核心內(nèi)容設(shè)計(jì)則成為游戲差異化的重點(diǎn)內(nèi)容之一,而戰(zhàn)斗系統(tǒng)則是角色扮演游戲里幾乎不可缺少的內(nèi)容,它與玩家的長(zhǎng)期互動(dòng)環(huán)節(jié)有緊密關(guān)聯(lián)。戰(zhàn)斗系統(tǒng)是角色動(dòng)作游戲的核心內(nèi)容,是游戲的直觀表現(xiàn)之一,同時(shí)也影響到游戲的整體設(shè)計(jì)水平。
戰(zhàn)斗系統(tǒng)有其完整的流程框架及設(shè)計(jì)標(biāo)準(zhǔn),從前期的策劃到模型資產(chǎn)的生成,再到后期代碼編寫(xiě)及測(cè)試,從表面上看這是一個(gè)線性流程,但在項(xiàng)目中可以進(jìn)行非線性編輯。例如在游戲開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)角色戰(zhàn)斗機(jī)制某個(gè)環(huán)節(jié)需要調(diào)整,則可以重新修改機(jī)制策劃表格數(shù)據(jù),修改代碼以滿(mǎn)足項(xiàng)目需要。
如圖1 所示,游戲角色的屬性是整個(gè)游戲的基礎(chǔ)數(shù)據(jù),它直接影響到角色在游戲中的發(fā)展。如果游戲中存在多種職業(yè),則角色屬性根據(jù)不同的職業(yè)設(shè)定不同的基礎(chǔ)屬性,如生命值、基礎(chǔ)攻擊、基礎(chǔ)防御等。除此以外,還存在輔助屬性,如閃避、暴擊、技能附加狀態(tài)等[1]。
基礎(chǔ)屬性是戰(zhàn)斗系統(tǒng)的根基,攻擊、防御、生命等參與最直接的邏輯計(jì)算。比如我方角色實(shí)施一次攻擊,根據(jù)敵方角色的防御來(lái)扣除一定量的生命值,這是最原始的計(jì)算方式,雖然最終不會(huì)直接使用這種方式,但它是游戲中一切算法的基礎(chǔ)?;A(chǔ)攻擊方式一般不宜過(guò)多,電腦端大型網(wǎng)絡(luò)游戲會(huì)限制在十種以?xún)?nèi),移動(dòng)端游戲則一般限制在四種以?xún)?nèi),但移動(dòng)端游戲可能會(huì)由基礎(chǔ)攻擊衍生出分支攻擊,以此來(lái)增加游戲可玩性。
輔助屬性通常起到對(duì)基礎(chǔ)屬性的修正作用,這類(lèi)屬性也會(huì)并入攻防傷害計(jì)算公式中。戰(zhàn)斗基礎(chǔ)屬性是一切攻防的底層基顧,但這種基礎(chǔ)計(jì)算會(huì)令玩家覺(jué)得枯燥乏味。如果在此基礎(chǔ)上加入隨機(jī)性,則玩家有一定機(jī)率戰(zhàn)勝比自己稍強(qiáng)的對(duì)手,實(shí)現(xiàn)越級(jí)挑戰(zhàn)。當(dāng)玩家觸發(fā)輔助屬性中的其中一個(gè)及以上數(shù)量的分支屬性,會(huì)獲得更高的回報(bào)收益,這樣會(huì)較大程度增加玩家的挑戰(zhàn)欲望和成就感。
輔助屬性中部分分支屬性不能過(guò)多分配,例如暴擊、閃避以及部分技能會(huì)產(chǎn)生多倍攻擊和令對(duì)手無(wú)法命中,這樣雖然會(huì)增加游戲的趣味性,但類(lèi)似這些效果只能控制在短時(shí)間范圍內(nèi),否則會(huì)破壞機(jī)制平衡。
游戲戰(zhàn)斗框架主要涉及到玩家、怪物、NPC 的行為,以及由此行為而導(dǎo)致的反饋。本案例把戰(zhàn)斗框架分成三個(gè)模塊:動(dòng)畫(huà)模塊、行為模塊、事件反饋模塊。
動(dòng)畫(huà)模塊實(shí)現(xiàn)了角色的動(dòng)畫(huà)與動(dòng)畫(huà)控制功能,例如角色行走、跑步、飛行、攻擊等行為,而動(dòng)畫(huà)控制功能則是精確控制角色所有動(dòng)作的播放,當(dāng)鼠標(biāo)或鍵盤(pán)輸入指令時(shí)令角色播放相應(yīng)的動(dòng)作。該模塊是為了讓玩家輸入指令獲得直觀的反饋,也是游戲底層和玩家的直觀互動(dòng),而所有角色動(dòng)畫(huà)都由狀態(tài)機(jī)實(shí)現(xiàn)。
行為模塊分為玩家行為、NPC 行為、怪物行為。在游戲的虛擬世界中,角色并不具備現(xiàn)實(shí)世界中生物的思考能力,這就需要給模型賦予一定的預(yù)置行為,最后把這些行為封裝成模塊,提供接口。例如NPC 處于站姿且等待玩家互動(dòng)的狀態(tài),野外的怪物在站崗監(jiān)測(cè)敵情的狀態(tài)。這些行為均未觸發(fā)某些特定事件,處于無(wú)限待機(jī)循環(huán)的狀態(tài)。
事件反饋是基于行為模塊在觸發(fā)某事件后作出的進(jìn)一步行為,例如地圖上的怪物在玩家進(jìn)入其監(jiān)測(cè)范圍內(nèi)后,將對(duì)玩家采取何種行為,如召集同伴實(shí)施群體攻擊,或者實(shí)行其他攻擊方式。不同怪物敵人有不同的行為反饋,但其中必有其共同的行為,如個(gè)體攻擊方式或群體圍攻,將行為拆分成小模塊封裝成接口可在后續(xù)程序加以調(diào)用。戰(zhàn)斗框架如圖2 所示。
圖2: 戰(zhàn)斗框架
在游戲戰(zhàn)斗框架設(shè)定后,就需要考慮戰(zhàn)斗系統(tǒng)的平衡。游戲的平衡關(guān)系到整個(gè)游戲能否持續(xù)運(yùn)作下去,玩家在完成某件任務(wù)后獲得的獎(jiǎng)勵(lì)要與任務(wù)難度成正比,如果獎(jiǎng)勵(lì)過(guò)于豐厚則會(huì)破壞游戲平衡性,從而令游戲無(wú)法長(zhǎng)久運(yùn)作[2]。
角色扮演游戲的角色成長(zhǎng)分為兩種:升級(jí)型和無(wú)等級(jí)型。本項(xiàng)目使用的是升級(jí)型成長(zhǎng)模式。升級(jí)型的成長(zhǎng)以角色等級(jí)、裝備等級(jí)、道具等級(jí)、技能等級(jí)提升作為主要標(biāo)準(zhǔn),其中角色等級(jí)限制了其他部分等級(jí)的提升。如果角色等級(jí)不提升則其他部分等級(jí)也無(wú)法提升,也無(wú)法遭遇等級(jí)更高的怪物敵人而導(dǎo)致游戲無(wú)法繼續(xù)玩下去。
本項(xiàng)目設(shè)計(jì)的游戲挑戰(zhàn)難度主要針對(duì)玩家與電腦怪物敵人的戰(zhàn)斗,它亦是ARPG 游戲需要重點(diǎn)思考的問(wèn)題。如果游戲中怪物的戰(zhàn)力等級(jí)超越玩家越多,則玩家的挑戰(zhàn)難度越大,反之越小。當(dāng)玩家戰(zhàn)力與怪物差距在一定的小范圍內(nèi)時(shí),玩家會(huì)被戰(zhàn)斗過(guò)程吸引。玩家角色與怪物敵人戰(zhàn)力平衡模型圖如圖3 所示。
圖3: 玩家角色與怪物敵人戰(zhàn)力平衡模型
從圖3 坐標(biāo)圖可見(jiàn),玩家角色和怪物等級(jí)最小值為1,當(dāng)玩家角色戰(zhàn)力等級(jí)遠(yuǎn)高于怪物時(shí),玩家就會(huì)覺(jué)得戰(zhàn)斗難度較低,反之會(huì)覺(jué)得戰(zhàn)斗難度過(guò)高,兩者均不會(huì)在心理上產(chǎn)生成就感,同時(shí)也不會(huì)保持游戲興奮度。所以,游戲設(shè)計(jì)盡量讓玩家處于這種狀態(tài),利用地圖區(qū)域限制的方式來(lái)劃定怪物相應(yīng)的等級(jí),以此保持對(duì)游戲的興奮度。假設(shè)在新手村地圖的怪物等級(jí)是1 至4 級(jí),而玩家角色在該區(qū)域最快能提升至6 級(jí),當(dāng)玩家角色升至6 級(jí)時(shí),擊殺4 級(jí)的怪物獲得的經(jīng)驗(yàn)值將大幅下降,欲想快速升級(jí)則必須進(jìn)入更高級(jí)的地圖區(qū)域。
除了主要任務(wù)的戰(zhàn)力平衡,需要設(shè)計(jì)少部分高難度的任務(wù),如擊殺特定的首腦怪物。這些任務(wù)有更高戰(zhàn)力等級(jí)的怪物敵人,任務(wù)獎(jiǎng)勵(lì)也更高。這種風(fēng)險(xiǎn)高、獎(jiǎng)勵(lì)高的任務(wù)通常是為操作水平較高的玩家而提供,這類(lèi)玩家數(shù)量較少,并不影響游戲整體平衡。
令玩家長(zhǎng)期保持游戲興奮狀態(tài)是游戲設(shè)計(jì)必須要做的環(huán)節(jié),但興奮時(shí)間過(guò)長(zhǎng)也會(huì)給玩家?guī)?lái)疲勞感。人的大腦在長(zhǎng)時(shí)間興奮時(shí)必然會(huì)精神高度集中,當(dāng)戰(zhàn)斗任務(wù)結(jié)束后則會(huì)感覺(jué)無(wú)法繼續(xù)這種狀態(tài),精神高度亢奮會(huì)消耗大量精力。因而,玩家高強(qiáng)度戰(zhàn)斗后則需要適當(dāng)?shù)男菹?,可以適當(dāng)設(shè)計(jì)一些休閑小游戲或建立安全區(qū)供玩家休息等。
游戲戰(zhàn)斗流程結(jié)合了前面所提到的幾方面,它并非單獨(dú)存在。整體而言,戰(zhàn)斗流程是從預(yù)備狀態(tài)到結(jié)束戰(zhàn)斗的過(guò)程,它可以發(fā)生多次循環(huán)。同一款游戲中針對(duì)不同敵人可以有不同的戰(zhàn)斗機(jī)制,以此區(qū)別各種不同類(lèi)型的戰(zhàn)斗。戰(zhàn)斗流程主要由以下幾個(gè)環(huán)節(jié)構(gòu)成,其中攻擊狀態(tài)、傷害計(jì)算是戰(zhàn)斗流程中的兩大核心環(huán)節(jié)。三種傷害類(lèi)型包括基礎(chǔ)攻擊傷害、主動(dòng)技能傷害、被動(dòng)技能傷害,均是封裝好的模塊,戰(zhàn)斗中產(chǎn)生的傷害就是調(diào)用這些模塊來(lái)計(jì)算數(shù)值,這些數(shù)值會(huì)影響戰(zhàn)斗結(jié)果的評(píng)價(jià),從而影響戰(zhàn)斗勝利時(shí)的獎(jiǎng)勵(lì)[3]。戰(zhàn)斗流程如圖4 所示。
圖4: 戰(zhàn)斗流程
從游戲設(shè)計(jì)的角度來(lái)看,戰(zhàn)斗系統(tǒng)是為了讓玩家體驗(yàn)戰(zhàn)斗樂(lè)趣而設(shè)計(jì)的,即玩家通過(guò)戰(zhàn)斗過(guò)程而獲得愉悅的體驗(yàn)。對(duì)于不同的玩家有不同的體驗(yàn),戰(zhàn)斗流程的設(shè)計(jì)主要是迎合絕大部分玩家,不能為了少部分特例玩家而破壞大部分玩家的體驗(yàn)。平衡不同玩家的體驗(yàn)是游戲戰(zhàn)斗流程設(shè)計(jì)的重點(diǎn)環(huán)節(jié),對(duì)于移動(dòng)端游戲,則需要內(nèi)測(cè)玩家反饋回來(lái)的大量數(shù)據(jù)和意見(jiàn)才能做好平衡的策略。
戰(zhàn)斗傷害邏輯被包含于戰(zhàn)斗流程中,它主要表達(dá)戰(zhàn)斗過(guò)程產(chǎn)生的個(gè)體傷害關(guān)系。
即時(shí)戰(zhàn)斗和回合戰(zhàn)斗是動(dòng)作角色扮演游戲的兩種戰(zhàn)斗模式,它們均要遵守戰(zhàn)斗流程提供的戰(zhàn)斗傷害邏輯,本項(xiàng)目使用了即時(shí)戰(zhàn)斗模式開(kāi)發(fā)戰(zhàn)斗系統(tǒng)。即時(shí)戰(zhàn)斗和回合戰(zhàn)斗在制作難度上有較大區(qū)別,即時(shí)戰(zhàn)斗的角色可能在同一秒中受到不同對(duì)手發(fā)出的攻擊,以及不同的技能負(fù)面效果,綜合各種因素計(jì)算出即時(shí)所受到的傷害數(shù)值。即時(shí)制可以多個(gè)單位同時(shí)戰(zhàn)斗,需要計(jì)算多個(gè)線程,并發(fā)壓力大,對(duì)程序編寫(xiě)的要求高。即時(shí)戰(zhàn)斗模式傷害計(jì)算的基本邏輯是通過(guò)技能基礎(chǔ)傷害、防御減傷、技能buff影響等因素來(lái)綜合計(jì)算[4]。戰(zhàn)斗傷害邏輯關(guān)系如圖5 所示。
圖5: 即時(shí)戰(zhàn)斗傷害邏輯
戰(zhàn)斗流程提供的是戰(zhàn)斗的整體框架和邏輯,而戰(zhàn)斗中產(chǎn)生的數(shù)據(jù)則是由公式來(lái)計(jì)算,公式中包含了角色屬性和傷害計(jì)算內(nèi)容。游戲中的戰(zhàn)斗算法公式可以根據(jù)項(xiàng)目需要自行定義,但不同項(xiàng)目的公式算法差異不大。
5.2.1 角色生命值屬性公式
角色涉及戰(zhàn)斗系統(tǒng)的重要屬性是生命值,它直接參與戰(zhàn)斗數(shù)據(jù)的計(jì)算。游戲角色的生命值有多種計(jì)算方法的公式,但基本的思路框架不變。本案例生命值計(jì)算公式設(shè)定如下:
角色總生命值=(原始生命值+等級(jí)生命值+裝備生命值)×(1+裝備生命值百分比)
假設(shè)某角色出生時(shí)是1 級(jí),其基礎(chǔ)生命值為500,等級(jí)提升到2 級(jí)時(shí)增加200 生命值,裝備固定生命值100,裝備能提升角色生命值的3%(裝備的特殊屬性),則該角色在2 級(jí)時(shí)生命值為:(500+200+100)×(1+3%)=824。
除此以外,角色在某種技能增益下還能短時(shí)間內(nèi)提高生命值。當(dāng)角色生命值為零時(shí),角色死亡[5]。
5.2.2 技能輸出公式
角色除了普通攻擊外,通常還有技能的施放,此算法是針對(duì)傷害技能而設(shè)計(jì),有需要時(shí)可以在傷害計(jì)算中調(diào)用。技能公式大致框架為:
技能輸出傷害值=技能原始傷害值×(1+技能傷害輸出比率+角色增益比率+目標(biāo)狀態(tài)比率)
技能原始傷害值是顯示在游戲?qū)傩悦姘逯械?,玩家可以查看。而技能傷害輸出比率、角色增益比率等三個(gè)屬性玩家無(wú)法查看,屬于隱藏屬性,主要是為了方便程序員后期調(diào)整游戲數(shù)值平衡[6]。需要注意的是此技能輸出傷害值僅為單方輸出數(shù)值,未計(jì)算敵方防御和其他參數(shù),非敵方最終受到的傷害數(shù)值[6]。
5.2.3 公有傷害輸出公式
公有傷害輸出公式主要有三種:減法、乘法和除法??筛鶕?jù)不同項(xiàng)目來(lái)定義輸出公式。
減法計(jì)算是最直觀的,計(jì)算方法即攻擊減去防御得出傷害值,如:
敵方受到的傷害值=攻擊-防御
減法公式的最大弊端是當(dāng)防御大于攻擊時(shí)總傷害等于零,在游戲中零傷害的數(shù)值是不被允許存在的,傷害值至少是1。
在本案例中使用的是乘除法,這種算法最終結(jié)果不會(huì)出現(xiàn)零傷害值的現(xiàn)象。其中R 是自定義的一個(gè)常數(shù),公式的核心邏輯是計(jì)算出減傷率,并用一個(gè)常數(shù)來(lái)調(diào)整傷害輸出的平衡。利用常數(shù)來(lái)調(diào)整傷害輸出數(shù)值是項(xiàng)目中常用的手法,更重要的是在游戲后續(xù)更新中可以進(jìn)一步調(diào)整角色戰(zhàn)力參數(shù)[7]。
敵方受到的傷害值=技能輸出傷害值x [1-防御/(防御+R x 武器級(jí)別值)]
乘除法計(jì)算公式可以用在物理攻擊上,也可以用在法術(shù)攻擊上,只是兩種攻擊的收益加成略有不同,但整體思路框架不變。此算法調(diào)用了5.2.1 的技能輸出傷害值,將其與武器級(jí)別值納入計(jì)算,計(jì)算敵方最終受到的傷害值。
戰(zhàn)斗系統(tǒng)的關(guān)鍵功能主要包括角色動(dòng)畫(huà)狀態(tài)機(jī)設(shè)置和戰(zhàn)斗腳本算法,這兩個(gè)環(huán)節(jié)互相關(guān)聯(lián),缺一不可。
游戲中的角色動(dòng)畫(huà)可以通過(guò)給角色預(yù)制體的Animaiton 組件添加多個(gè)動(dòng)畫(huà)片斷,以此來(lái)控制角色的不同狀態(tài)動(dòng)畫(huà)。但Animaiton 組件不能提供動(dòng)作動(dòng)畫(huà)之間的過(guò)渡轉(zhuǎn)換,也不能表達(dá)動(dòng)作之間的邏輯關(guān)系。而動(dòng)畫(huà)狀態(tài)機(jī)(Animator)則可以讓游戲設(shè)計(jì)師減少大量的代碼編寫(xiě)工作,僅需要極少的代碼即可實(shí)現(xiàn)不同狀態(tài)的轉(zhuǎn)換。
單個(gè)角色通常都有多個(gè)不同的動(dòng)畫(huà)片斷來(lái)表達(dá)不同的行為,如角色在待機(jī)時(shí)人體常規(guī)微動(dòng)作、行走和奔跑時(shí)的動(dòng)作、攻擊和防御時(shí)的動(dòng)作等。角色在狀態(tài)動(dòng)畫(huà)切換是有條件限制的,動(dòng)畫(huà)之間并非隨意切換,例如角色具有連招的攻擊動(dòng)畫(huà),那么第二段攻擊必須建立在第一段攻擊的基礎(chǔ)上,否則無(wú)法激發(fā)該動(dòng)畫(huà)。狀態(tài)機(jī)可以創(chuàng)建一個(gè)Animator Controller 來(lái)設(shè)置動(dòng)作的關(guān)聯(lián)過(guò)渡,如圖6 所示。
圖6: 角色動(dòng)畫(huà)狀態(tài)機(jī)設(shè)置
狀態(tài)機(jī)中Any State 節(jié)點(diǎn)代表各個(gè)狀態(tài)隨時(shí)都可能跳轉(zhuǎn)至它能指向的其他狀態(tài),可以將其視為一個(gè)監(jiān)聽(tīng)器,同時(shí)也是所有狀態(tài)的總控制節(jié)點(diǎn),在一定條件下它可以讓任意一個(gè)狀態(tài)播放動(dòng)畫(huà)。Any State 節(jié)點(diǎn)非強(qiáng)制性使用,在本項(xiàng)目中首先將Idel 動(dòng)畫(huà)拖入狀態(tài)機(jī),Entry 節(jié)點(diǎn)則默認(rèn)將其作為初始動(dòng)畫(huà),該初始動(dòng)畫(huà)會(huì)被映射到Any State 節(jié)點(diǎn)中,使其具有Idel 動(dòng)畫(huà)的屬性。當(dāng)動(dòng)畫(huà)狀態(tài)節(jié)點(diǎn)數(shù)量較多時(shí),Any State 可以起到更好管理所有狀態(tài)動(dòng)畫(huà)的作用。
狀態(tài)機(jī)動(dòng)畫(huà)的另一種管理方法是分層管理,表面上可以實(shí)現(xiàn)動(dòng)作組的高效管理,但本質(zhì)上連線數(shù)量仍然不變,并未減少工作量,本項(xiàng)目不采用分層管理的方法。
狀態(tài)機(jī)的動(dòng)畫(huà)節(jié)點(diǎn)根據(jù)需要設(shè)置過(guò)渡連線(Make Transition),同時(shí)需要設(shè)置相應(yīng)過(guò)渡條件(Conditions),當(dāng)前置動(dòng)畫(huà)滿(mǎn)足過(guò)渡條件時(shí)就會(huì)播放下一個(gè)動(dòng)畫(huà),如表1 狀態(tài)機(jī)動(dòng)畫(huà)觸發(fā)條件。
表1: 狀態(tài)機(jī)動(dòng)畫(huà)觸發(fā)條件
表中狀態(tài)機(jī)條件類(lèi)型有Bool 和Trigger 兩種,其中Bool 類(lèi)型參數(shù)當(dāng)達(dá)到觸發(fā)條件后播放下一段動(dòng)畫(huà),動(dòng)畫(huà)結(jié)束后會(huì)切換回待機(jī)(Idle)動(dòng)畫(huà),而Trigger 類(lèi)型條件則只播放一次,通常為攻擊或防御類(lèi)型動(dòng)畫(huà)。當(dāng)?shù)谝欢喂簦ˋttack1)播放結(jié)束時(shí),再次按下攻擊鍵會(huì)繼續(xù)播放第二段攻擊(Attack2)實(shí)現(xiàn)連續(xù)攻擊,第二段攻擊結(jié)束時(shí)如不再按攻擊鍵,則會(huì)返回待機(jī)(Idle)動(dòng)畫(huà),如繼續(xù)按攻擊鍵會(huì)再次從第一段攻擊開(kāi)始循環(huán)。
從6.1 可知角色攻擊按鈕分為普通攻擊(Norma Attackl)和范圍攻周(AoeAttack),當(dāng)按下普通按鈕時(shí),怪物在近距離攻擊范圍時(shí)則會(huì)受到攻擊傷害,連續(xù)按普通攻擊按鈕則會(huì)產(chǎn)生連招效果,對(duì)怪物施予多段攻擊傷害,而范圍攻擊則可以在攻擊范圍內(nèi)單次對(duì)多個(gè)怪物實(shí)施攻擊[8]。游戲戰(zhàn)斗操作界面使用NGUI 插件設(shè)置,如圖7 所示。
圖7: 游戲戰(zhàn)斗操作界面
設(shè)置完操作按鈕后,通過(guò)代碼添加點(diǎn)擊事件的監(jiān)聽(tīng)。玩家在操作角色時(shí)是直接對(duì)角色輸入指令,如有多個(gè)角色則一般會(huì)設(shè)置成預(yù)置體,通過(guò)C#的UIButton 里的onClik 事件,監(jiān)聽(tīng)普通攻擊和范圍攻擊虛擬按鈕的操作情況。具體代碼如下:
動(dòng)作游戲里存在多個(gè)技能,不同的技能按設(shè)定好的機(jī)制形成相應(yīng)的連招。連招并非只有一套,因游戲本身無(wú)法預(yù)測(cè)玩家下一次按哪個(gè)技能鍵,因此連招具有一定的不確定性。即使玩家不按預(yù)定的招式按下技能鍵,盡管動(dòng)作衍接不流暢,但也能形成連招,例如奔跑過(guò)程中突然發(fā)起攻擊,動(dòng)作之間的補(bǔ)幀則由狀態(tài)機(jī)計(jì)算完成[9]。
從圖6 可知,普通攻擊的Attack2 是Attack1 的后續(xù)攻擊動(dòng)作,當(dāng)兩個(gè)動(dòng)作按順序播放時(shí)則形成連招。攻擊動(dòng)作Attack1 共10 幀,設(shè)置前5 幀為事件Attack2Event1(可觸發(fā)Attack2),后5 幀為事件Attac k2Event2(不可觸發(fā)Attack2)。具體代碼如下:
連招動(dòng)作效果如圖8 所示,在Attack1 動(dòng)畫(huà)前5 幀內(nèi)繼續(xù)按下普通攻擊鍵,則會(huì)播放Attack2 動(dòng)畫(huà)實(shí)現(xiàn)連招,反之則回到待機(jī)(Idel)動(dòng)畫(huà)。
圖8: Attack1(左)和Attack2(右)連招動(dòng)作
游戲戰(zhàn)斗傷害計(jì)算有多個(gè)環(huán)節(jié),在C#中可先定義一個(gè)公有傷害類(lèi),以便為其他傷害算法所調(diào)用,如主角的連招及敵人的攻擊等。此處定義血量為300,普通攻擊傷害為30,攻擊范圍為1,animator 為狀態(tài)機(jī)的變量。
當(dāng)角色受到攻擊時(shí),其剩余血量值為:角色剩余生命值=角色最大生命值-受到傷害值。此時(shí)若角色剩余血量大于零,則處于受擊狀態(tài),同時(shí)播放受擊硬直動(dòng)畫(huà),否則進(jìn)入死亡狀態(tài),同時(shí)播放死亡過(guò)程動(dòng)畫(huà)[10]。其邏輯關(guān)系如圖9 所示。
圖9: 攻擊及傷害輸出判定
判定角色存活或死亡具體C#代碼如下:
將主角與怪物放置于戰(zhàn)斗場(chǎng)景中運(yùn)行游戲,連續(xù)點(diǎn)擊黑色NORMAL 普通攻擊鍵令主角發(fā)動(dòng)連招從而攻擊怪物,同時(shí)怪物也對(duì)主角進(jìn)行攻擊。當(dāng)其中一方先受到攻擊則會(huì)產(chǎn)生硬直狀態(tài),左下角的位移鍵可使主角移出怪物攻擊范圍,從而令怪物無(wú)法攻擊主角。連招效果如圖10 所示。
圖10: 連招效果
當(dāng)按下紅色ATTACK(AoeAttack)鍵時(shí),主角發(fā)動(dòng)范圍攻擊,給予怪物重?fù)粜Ч?。如圖11 所示。
圖11: 范圍重攻擊效果
經(jīng)測(cè)試,怪物的戰(zhàn)力符合玩家角色與怪物敵人戰(zhàn)力平衡模型的設(shè)計(jì)要求,玩家可以在地圖中通過(guò)配合走位和攻擊,從而擊殺與自身戰(zhàn)力差距不大的怪物。
動(dòng)作游戲戰(zhàn)斗系統(tǒng)的質(zhì)量直接影響玩家的游戲體驗(yàn),系統(tǒng)的模塊之間緊密相扣,形成一個(gè)整體。本案例對(duì)游戲戰(zhàn)斗系統(tǒng)各模塊進(jìn)行了研究與設(shè)計(jì),實(shí)現(xiàn)了動(dòng)作游戲戰(zhàn)斗系統(tǒng)的主要功能。去除了陳舊的設(shè)計(jì)思路,從玩家角度出發(fā),優(yōu)化了戰(zhàn)斗系統(tǒng)的平衡性,避免了玩家可能因游戲難度過(guò)高或過(guò)低從而對(duì)游戲失去興趣,同時(shí)也調(diào)整了戰(zhàn)斗動(dòng)作,增加了其流暢性,增強(qiáng)了玩家的游戲戰(zhàn)斗體驗(yàn)。