當前位置:首頁 >教程首頁 > 3ds Max >什麼是“動作狀態機”?如何設計真正的動作遊戲?

什麼是“動作狀態機”?如何設計真正的動作遊戲?

發布時間:2020-05-21 10:47:29

 從業好幾年,有幸能參與到幾款動作遊戲的開發。今天跟大家分享一些設計心得。一篇文章難以涵蓋所有,準備分篇發布。本文談及的所有,都會反映出本人及同事們的偏好。條條大路通羅馬,不同的開發者會有不同解決方案。這裏所提供的絕非唯一解,希望能通過這篇文章與各路大神交流。接下來就來聊聊什麼是“動作狀態機”?如何設計真正的動作遊戲?

本文談及的設計思路主要體現在下麵兩款遊戲中:

1.webp.jpg

《十三煞》和《砰砰小怪獸》這倆遊戲是同一撥人做的,你敢信?

事先聲明:

    1)本文討論的“動作遊戲”比較接近Capcom的遊戲,而不是《蝙蝠俠:阿卡姆係列》那樣的動作遊戲。

    2)本文會提及“打擊感”,但是會先論述一些基礎知識,請耐心閱讀。

   3)本文中提及的所有機製,目的都是“讓角色的動作令人信服”。

讓遊戲角色的動作讓人信服,一方麵要參考真實生活,但是這不意味著越擬真越好,有時候我們會選擇貼近玩家的想象,或者說是捕獲他們的心思,而不是貼近現實生活。這就要求設計者有對幻想類作品有大量的觀影體驗並且有一定審美能力。這是一門很神奇的手藝。

讓我們思考一個問題:二隆對拳

假設A和B是兩個角色。兩人都想出拳攻擊對方。

2.gif

你就想象兩個隆用這個動作打對方

兩人的招式完全一樣,但是A出拳早,B出拳晚。正處於前搖階段的B被A的拳頭命中。

問:這個時候應該發生什麼結果?

這個情況我們在很多遊戲裏麵體驗過無數遍了,相信你的答案必定是脫口而出的。

答:A命中B的瞬間,B的出拳動作被打斷,B立即放受傷動作。

在《街霸》裏實際就是上述的效果。真正的問題是:怎樣在遊戲中實現以上效果?請現在先閉上眼睛思考一下這個問題。思考完我們繼續。

動作狀態機

【例一】

3.webp.jpg

【圖例】

    1)圖中的每一個方框稱為一個“動作片段”。

    2)每一個箭頭稱為一個“中斷”,即“此動作片段中斷至另一個動作片段”之意。

    3)箭頭上的文字代表這個中斷的必要條件。如果箭頭上無文字,代表無需條件。本動作結束就沿箭頭方向發生中斷。

*注意:所有箭頭都是單向的。如果兩個動作可以雙向切換,應該繪製兩個單向箭頭,並且每個箭頭旁邊標注其必要條件。

【解讀】

遊戲開始,角色先進入起始動作。起始動作結束後角色進入“待機”動作。

待機動作有兩種後續可能性:

    1)玩家不進行任何操作,角色將循環播放待機動作。

    2)玩家輸入“P”鍵,角色將播放“拳”動作。拳動作結束後,角色回歸到待機動作。

這就是一個簡單的動作狀態機。動作狀態機就是這樣一個機構:這個機構負責管理角色眾多動作片段,以及這些動作片段之間應該如何切換。目前這個角色非常簡單,隻能使出待機和出拳兩個動作。動作狀態機內容越豐富,功能越強大,角色就越生動。

在實際開發過程中,動作狀態機可能有可視化麵板,外觀看起來就像【例一】的流程圖。但是也有可能是看起來枯燥無味的編輯器界麵。開發者會使用引擎提供的工具或者自己打造開發工具。本文重點在討論思路,這個就不展開說了。

值得注意的是,玩家眼裏的“一個”動作實際上可能是多個動作片段連續播放的結果。

4.gif

三個階段實質上是三個動作片段

例如,上麵的“直拳”動作雖然時間看起來很短,但實質上是三個動作片段(即,前搖-中段-後搖)連續播放的結果。其中,隻有中間片段配置了攻擊屬性。把動作分得這麼細一是為了更方便地調試手感、競技平衡性,二是為了細膩地管理動作片段之間如何切換。

動作片段之間的切換(非戰鬥)

這個命題非常艱辛,為了保證文章可讀性,本文隻介紹核心思路,略去一些過於瑣碎的知識。

窮舉法

我們使用的是窮舉法。此方案的核心思路:窮舉動作切換的所有可能性,並窮舉每一種可能性的必要條件。

所有中斷的窮舉

【例二】

為了方便理解,我們假設現在有一個簡單的角色。這個角色能執行的動作包括:待機、走路、跳躍、攻擊。玩家的輸入按鈕也很簡單,包括:搖杆、攻擊鍵、跳躍鍵。

角色的動畫狀態機為:

5.webp.jpg

【圖例】

    1)橙色的方塊:代表自循環的動作片段。在沒有任何一個箭頭得到條件滿足的情況下,這個動作會自循環。

其餘圖例與例一相同。

【解讀】

我們來嚐試窮舉其中幾個:

“待機”可切換至:

    1)待機

    2)走路

    3)跳躍上升

    4)地麵攻擊

“走路”可切換至:

    1)跳躍上升

    2)地麵攻擊

如是這般,不一一列舉。通過窮舉我們可以看出:

待機不可能直接切換至空中下墜。然而,待機-跳躍上升-空中下墜,這樣的切換則是成立的。

每個中斷的所有必要條件的窮舉

觀察上述的例子,我們可以發現,這個角色有兩個攻擊動作,分別是:地麵攻擊以及空中攻擊。但是在一般遊戲裏麵,這通常是同一個攻擊鍵來觸發。換句話來說,在不同的情境下同一個按鈕能表達出不同的動作。為了實現這個效果,我們需要多重條件判斷:

    1)角色處於地麵還是空中?

    2)玩家有否輸入攻擊鍵?

上述兩個條件共同決定角色使出的是地麵攻擊還是空中攻擊。

在【例二】中列出所有判斷條件,表現如下:

6.webp.jpg

以上隻是一個很簡單的狀態機。可以看到,裏麵的東西已經不少了。

值得注意的是,這個狀態機表達出來了一些規則,例如:

    1)角色在空中隻能攻擊一次

    2)角色不能二段跳

不妨想象一下,如果這個角色可以二段跳,那麼它的狀態機會是什麼樣子。

開發者會根據項目需要來決定動作狀態機的內容。通常來說,比上圖的要複雜得多。例如,在很多遊戲裏頭都有這個設計:按攻擊鍵同時推動搖杆,會使出“前衝攻擊”;不推動搖杆則是“原地攻擊”。

窮舉法是一個可靠的方案,能應付大部分的開發需求。但同時它具有極強勸退效果。因為其配置工作量巨大,過程繁瑣。下麵我們來探討更牛逼的方案。

全局監控

請看這個動圖:

7.gif

請留意德雷克有個很皮的摸牆小動作。(再摸又要塌了喂!)

這個“摸牆”的小動作把我震撼了。我當時在想,是得有多逆天的動作編輯器,才能做出如此細膩的動作表現?頑皮狗太牛逼了。Too good to beture,但是它真真實實地擺在我們麵前。德雷克的言行是如此自然(沒錯,都可以用上“言行”這個詞了)以至於我們遊玩的時候,好多個瞬間都忘記了自己是在玩遊戲,以為“我就是德雷克”。

聲明:以下內容均是我的推斷,從來沒得到過頑皮狗方麵的消息。

我嚐試把德雷克的各種“走路”相關動作片段以及其判斷條件逆推出來:

8.png

這裏可以看到一個重要的點:每個條件隻影響最終表現的一部分。其中一個表現的變化,會導致角色的言行有相應的變化。假設7)號條件NPC談話的判定結果為“是”,我們會發現德雷克走路時會一直注視NPC。

而為了管理眾多的條件,必須:

    1)優先級:優先執行某些條件的判斷。例如,3號條件“是否處於戰鬥”為優先級最高的判斷條件。

    2)父子關係:如果父條件判斷結果為“否”,則忽略子條件的判斷。例如,當係統判定角色“不在水中”,就會忽略所有與水相關的條件判斷。

    3)互相排斥:A條件判斷為“是”,則自動把B條件判斷關閉。假設4)號條件瀕死狀態的判定結果為“是”,那麼程序很可能會忽略5)的判斷——此情景下應該著重表現角色的痛苦,而不應該表現其俏皮的一麵。

以上隻是我能想象出來的一些手段。真的要執行起來,考慮到的肯定要更多。

這個方案的核心思路是捕獲到三類信息:

    a)玩家的按鍵輸入

    b)角色自身的狀態

    c)外部環境

三者共同進行判斷,最終結果就是角色總能做出符合當時情景的動作表現,我暫且稱呼這種方案為“全局監控”。把上述的條件都捕獲到之後,就需要一項黑科技“動作融合”——當條件成立的時候,往德雷克的走路動作中融入“摸牆”動作。本人對此知之甚少,就不說太多了。

這個時候我們回頭看窮舉法,會發現它難以做到這種效果。即使真的死磕出來,其中的工作量和維護成本都是難以想象的。

動作片段之間的切換(戰鬥)

還記得文章最開始二隆對拳裏麵提出的問題嗎?

為了實現《街霸》裏的效果,我們引入一個概念:“動作優先級”。這是一個數值,它的作用在於:為兩個動作片段提供一個比較依據。我們把這個值賦予到每一個戰鬥相關的動作片段中。

假設:

角色甲發出帶有動作A,同時角色乙正在發出動作B。

A和B都是攻擊動作。兩者都帶有“可受傷”屬性。A的攻擊框搶先一步命中了對手的受擊框。

動作A的優先級為a,動作B的優先級為b。

將兩者進行比較,

    若a≥b,乙的動作被打斷,乙立即播放受傷動作

    若a<b,乙會扣血,但當前動作不被打斷,繼續播放動作B

其中,前者的表現就是我們在版塊(二)中描述的那樣,而後者表現出來的效果則是大家平常口頭上說的“霸體”。

說到霸體,不同遊戲中的霸體不盡相同。

例1:某些動作片段帶有霸體,破霸體的辦法是在此片段內受到兩次擊打。

例2:某些動作片段帶有霸體,隻能被特殊屬性的動作(必殺技、投技等)打斷。

例3:霸體是一個持續一段時間的狀態。此狀態被解除之前,角色的任何動作都不能被打斷。

這些設計沒有孰是孰非之分,隻要遊戲內邏輯自恰即可。

打擊感

大家在這個話題上有較多的討論,本文就不做太詳細的論述了。

感官反饋

感官反饋包含:

1)受擊方的角色動畫:這裏有個技巧就是,傷害動畫第一幀就是後仰幅度最大的姿勢。這樣的衝擊力才足夠。

2)攻擊方的角色動畫:capcom特色“幀凍結”就是使攻擊方的動畫定住一兩幀。

3)打擊特效-固有特效:攻擊動作的固有特效,例如刀攻擊配上利刃特效。

4)打擊特效-質感特效:受擊方的質感,例如血肉之軀的對手配飆血特效,機器人對手則配火花四濺特效。

5)鏡頭抖動:每次命中都使鏡頭抖動一下。跺地的攻擊,或者斧頭砸地攻擊,即使不命中敵人也能觸發鏡頭抖動。在多人對戰遊戲中,鏡頭抖動是雙方的。

6)音效:跟特效一樣,分開固有音效和質感音效兩個。

7)手柄震動:這沒啥好說的。

飄傷害數字是最讓我不齒的做法,如果非得做,請謹慎使用。

以上所有反饋都必須在同一時刻開始播放。其中3)4)可以做兩種程度:普通和暴擊。

改變對手動作

上麵列舉的一係列感官反饋中,“改變對手動作”是打擊感最核心之處。因此單獨拿出來論述。值得注意的是,格鬥遊戲(例如《街霸》)和闖關遊戲(例如《怪物獵人》)不能一概而論。

在格鬥遊戲中,任何攻擊動作,隻要是有效的,都能改變對手動作(排除霸體)。而對手挨打之後的反應也很細膩,有各種不同程度不同性狀的受傷:小受傷、大受傷、受擊浮空、擊倒、擊退、版邊反彈等等。之所以有這麼細膩的受傷動作,不僅僅是為了“爽快”,更是出於對競技的平衡性考慮。輕攻擊對應的使小受傷,重攻擊或者特殊攻擊能打出高程度的受傷,是為了後續連招提供可能性。

9.gif

在幾秒鍾時間內,麵具被連續被打出起小受傷,浮空,擊飛三個受傷動作。

在闖關遊戲中,玩家麵對的敵人有小兵、精英怪、BOSS三個級別。小兵受到傷害的時候會立即播放受傷動作。與上文描述的《街霸》的設計一致。但是這個設計並不能套用到BOSS怪物身上。

我們以《怪物獵人》係列為例,怪物都是BOSS級別的敵人。這種敵人為了能對玩家造成壓迫感,是長時間擁有霸體狀態的。隻有生命值被降低到某個刻度的時候,才會出現一次受傷動作,玩家會為之雀躍。

10.gif

你要是問我為什麼不放MHW的圖,那是因為我對MHW的怪物數量非常不滿。

而《怪物獵人》之所以采取這樣的設計,還有一個重要的原因,就是這是一款多人遊戲。四名玩家同時討伐一頭怪物。因此這頭怪物的表現要足夠穩定。試想一下,如果每個玩家的打擊都能改變怪物的動作,那麼多個玩家的密集打擊會導致怪物一直處於受傷動作中。

開發者會根據自己的項目所需,去選擇適合自己項目的做法。

總結

“爽快的打擊感”不應該成為動作遊戲開發者的唯一目標。我希望能琢磨出一套易理解,好維護的辦法去創造令人信服的角色。下一篇依然是“動作狀態機”這個話題,將會結合實例進行講解。多謝收看~

來源:3D遊習廳

华体会hth体育网 賞析
  • 2101期學員李思庭作品

    2101期學員李思庭作品

  • 2104期學員林雪茹作品

    2104期學員林雪茹作品

  • 2107期學員趙淩作品

    2107期學員趙淩作品

  • 2107期學員趙燃作品

    2107期學員趙燃作品

  • 2106期學員徐正浩作品

    2106期學員徐正浩作品

  • 2106期學員弓莉作品

    2106期學員弓莉作品

  • 2105期學員白羽新作品

    2105期學員白羽新作品

  • 2107期學員王佳蕊作品

    2107期學員王佳蕊作品

專業問題谘詢

你擔心的問題,火星幫你解答
×

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯係,請保持電話暢通!
確定