《DFQ》開發隨錄——打擊感

歡迎參與討論,轉載請註明出處。

前言

·對於動作遊戲(本文所謂的動作遊戲具體指由FTG衍生而來的「超人系ACT」,如鬼泣、獵天使魔女等)而言,打擊感自然是重中之重,本篇就來講講DFQ的打擊感實現思路吧。
·首先要明確打擊感的定義,本人將之定義爲:攻擊命中時產生的反饋。就這點而言,打擊感並非是動作遊戲的專屬,凡是涉及到攻擊交互的遊戲都有。而動作遊戲與之不同在於會對在攻擊中附加控制效果(擊退、擊飛等),使得動作遊戲成爲了圍繞打擊感展開操作的遊戲。
·而DFQ的打擊感基本源於DNF,在此基礎上加入個人的理解,接下來便一一講解其中構成。

判定

·在產生攻擊命中之前,自然得討論如何觸發了。衆所周知,動作遊戲講究「所見即所得」——必須是看上去擊中了,纔算是命中。所以自然要使用一些方式去近似地模擬素材的邊界範圍,以此進行碰撞判定。而DFQ的做法則相當粗暴——直接構建一些近似的矩形,當然這矩形卻不一般:
collider
·如圖所示,人物擁有兩種顏色的矩形,其中白色矩形表示人物的X-Z軸矩形,紅色矩形表示爲X-Y軸矩形。與一般的無縱深橫版遊戲(冒險島、朧村正等)不同,DFQ這類可進行上下移動且滯空的橫版遊戲(DNF、三國戰紀等)會去構造一種「邏輯上的三維空間」:
coordinate
·當然實際上可以直接使用3D矩形(立方體)進行構造,只是2D圖形下不便表示,於是分解爲兩個矩形進行。自然地,判定時也是紅對紅、白對白。至於判定算法,由於DFQ沒有太精細的需求,矩形不會參與旋轉變換,故直接使用AABB即可。

擊退

·話不多說,直接上圖:
stun
·擊退是打擊感中最基本的元素了,當然將之命名爲擊退只是個人行爲,在業界它有着各種各樣的稱呼,如stun、硬直、僵直、気絶等,在此一提。
·由圖可見擊退有兩種不同的姿勢(爲了表現的豐富度),敵人會保持被擊姿勢一段時間,且變速位移一段距離。以函數的形式表示便是stun(time, speed, acceleration),time表示保持姿勢的時間,speed爲位移的初始速度,acceleration爲速度的衰減值(也可以是加速值),通過acceleration來每幀減少speed,以此實現簡單的變速運動效果。當然speed與acceleration並非是必須的(不帶位移的擊退),但time則必須有(無time不stun)。

擊飛

·同樣,直接上圖:
flight1
·與擊退同樣,擊飛也屬於動作遊戲裏最核心的控制效果之一,它的別名也很多,如flight、擊倒、倒地、浮空等。
·擊飛這種控制效果在最初只是作爲一種動畫表現手法而已,一般用於敵人死亡、某些想表達擊飛的招式等。敵人處於擊飛動畫時一般無法或難以繼續進行互動。將之發展的據說是CAPCOM開發《鬼武者》時觸發的一個BUG——敵人處於擊飛時被後續攻擊而產生了滯空效應。從此一發不可收拾,鑄就日後《鬼泣》皇牌空戰之名。
·而DFQ身爲2019年的遊戲,自然不可能落後:
flight2
·以上兩張圖基本可以窺得擊飛之全貌了:

  • 擊飛在狀態上可分爲上升、下落、倒地,上升與下落都會進行類似擊退的變速運動,且根據進度改變姿勢。
  • 姿勢內容爲擊退的兩個爲基礎外加它們的90度旋轉版本及倒地。
  • 在擊飛時被攻擊會切換姿勢且保持滯空一小會,形成了浮空連擊的效果。
  • 除此以外便是X軸的位移效果了,這點與擊退一致。
  • 倒地會根據浮空高度結算出「再擊飛」,畫面表現上爲落地彈起,若高度不足則直接倒地。

·與擊退類似,擊飛的基本函數形式則是flight(speed_z, speed_x, acceleration_z_up, acceleration_z_down, acceleration_x),參數含義與擊退類似,不再闡述。一般而言acceleration_z_up與acceleration_z_down會選擇默認值,speed_x與acceleration_x則爲可選項,但speed_z必須有(無speed_z不flight)。

特效

·繼續上圖:
effect
·特效其實沒什麼好說的,如果說動作姿勢是描線,那麼特效便是上色了。需要注意的是特效出現的位置一般得是矩形碰撞的交點處,這樣纔有「打中這個位置」的感覺。
·特效的種類一般就是斬、打、突、氣四類(利器、鈍器、銳器、魔法),外加出血之類等等,多多益善。
·順帶一提的是,由於特效算是一種創建銷燬十分頻繁的對象,值得爲之做對象池以減少創建銷燬的開銷。

聲音

·這下上不了圖了,畢竟聲音的可視化形式一般人類都看不懂(笑。
·由於打擊感是攻擊命中時產生的反饋,而反饋的形式自然不侷限於視覺上的,聽覺也相當的重要。當然這裏討論的聲音可不僅僅是攻擊瞬間產生的部分,還包括了整個招式過程。
·一般而言,一個招式基本會包含以下元素:

  • voice:如人物發招時的叫聲,播放時機不限。
  • swing:如人物揮劍的聲音、特效產生的聲音,一般於運動幀時播放。
  • hitting:如刀砍到身上的聲音,於命中時播放。
  • damage:敵人被攻擊的慘叫聲,於命中時播放。

·聲音這部分在業界不少垃圾遊戲可謂是偷工減料的重災區,實際上萬萬不可忽視,畢竟有時候效果好不好就靠聽個響(代表:拳皇)。

Hitstop、閃爍、抖動

·這仨放一塊討論是因爲他們相輔相成:
battle
·Hitstop這玩意我對其沒有準確的中文詞彙,業界一般稱爲硬直、僵直、卡肉等(可見多容易與擊退混淆)。其定義如其名般:因hit而導致stop。表現形式爲人物停止運動一段時間,這裏的運動包括位移、動畫之類。Hitstop是敵我雙方皆有的,我稱本體的Hitstop爲Selfstop,敵方爲Hitstop。由此可見,卡肉這個說法其實很恰當,感受起來就像是一下刀卡到肉裏了。一般Hitstop的高低可以用於表示攻擊的輕重,以及像內功拳法、一閃刀法等延遲殺傷效果也可以通過高Hitstop達成。
·至於閃爍就更直白了,就是敵人表面有一層純色遮罩漸變消失。值得注意的是,閃爍的運作也會受Hitstop影響,故在Hitstop期間閃爍是保持初始狀態的,看起來敵人就是蒙上了一層白色。這麼做可以使得命中的效果更爲明顯,在業界中《王者榮耀》也採用了這樣的表現手法。
·抖動在圖中也許看不太出來,主要就是設定個時間值以及抖動範圍(xa, xb, ya, yb),人物在時間內就會隨機位移,形成抖動的效果。與閃爍同樣,在Hitstop時間是不會流動的,所以抖動與閃爍類似,基本上便是用於加強Hitstop的表現力。在業界中CAPCOM的《吞食天地》也採用了這樣的表現手法。

後記

·以上只是打擊感的一些機械的構成,實際上要做好打擊感得充分利用許多元素,如場景震動、運鏡、符合節奏的連擊等。實際上它是一門導演的學問,要想培養就只能多抄多想多做。限於素材與平臺,未能表現更豐富的元素,只能有待日後進軍3D再說了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章