角色動作系統概述:戰鬥、3C相關
*有一個很重要的點我忘記說了,就是遊戲策略-實際上在製作動作系統的時候要考慮相容各種策略,但是在調手感前,要先想清楚自己的戰鬥策略,所為戰鬥策略是指博弈方式,以及對玩家的操作進行約束,約束具體是指你需要的是一個黏糊糊的手感,還是一個乾淨利索的手感,而整個戰鬥博弈是什麼樣的,如何保持有效博弈的同時,讓玩家特別明確,例如剪刀石頭布的方式,或者是打地鼠?亦或者是節奏遊戲?或者搓招?
*關於戰鬥反饋-這一點是關於給玩家的資訊的,所有給玩家的資訊絕對不能是單一的,例如被擊,被擊相關聯的資訊我之前看過一篇文章他們做了11種不同的反饋方向,保證玩家至少能接收到3-4種,例如聲音,攻擊特效,手柄震動,螢幕效果,動作反饋,環境反饋等等,這種資訊量越多,玩家就越明確,這裡還涉及到上一條戰略策略,玩家遊戲失敗的原因歸錯到遊戲的可能性也會更低。
*關於業務感知能力-我想說其實大部分問題都是看做這個的game play有沒有業務感知能力,感知到一些細節還有問題,這一塊基本上靠策劃是不行的,策劃畢竟不能實現細節,而且很多時候還會提出錯誤的方向,這全靠gameplay去探索和補完,所以gameplay是一個極其吃經驗和愛的職位。如果你不是一個深愛你做的這個型別的game play僅靠工程能力和一個靠譜的策劃,這個手感和細節一定達不到頂級。
首先3C(camera,control,character)是一個巨大的話題。
我對戰鬥系統本身非常有愛。
但是架不住不賺錢啊,這年頭手遊當道,基本上僅僅是3C做的出色很難找到很好的工作。
運氣好的是在我們那個獨立遊戲專案結束後有一段時間,
而且加上我之前開發獨立遊戲很多時候被渲染相關的業務卡住,
於是就轉型做技術向的TA,houdini大地形生成這個方向,並且一邊學習圖形學,一邊學習美術資產相關的東西。
圖形學相關的東西也相當的迷人,我天生就喜歡複雜而且結構化的東西,感覺可以沉浸在圖形學裡好多年,如此說來人生也許一晃就過去了。
3C作為任何遊戲的基礎,為了以後還有機會做動作類的遊戲,也對之前經驗的總結。
我把所有的資訊整合在這篇文章裡,方便以後查閱,也分享給大家,希望得到更多的指點。
關於3C
關於3C我認為最重要的一件事是有愛
那麼根據重要程度排序是這樣的:
1.愛
2.細節
3.架構
愛決定了細節的數量和高度,細節決定了質量,架構決定你能不能開發一個能用的東西出來。
我想說其實大部分問題都是看你有沒有業務感知能力,感知到一些細節還有問題,這一塊基本上靠策劃是不靠譜的,策劃畢竟不能實現,所以gameplay是一個極其吃經驗和愛的職位.如果你不是一個深愛你做的這個型別的game play僅靠工程能力,這個手感一定達不到頂級。
並且,3C的camera是另外一個大坑,我用的Cinemachine,但是負責任的說,如果要追求好的3C相機必須自己做,但是control和character應該在一起做,我只做了後者也是對工程量的妥協,整個系統我從18年8月開始做,期間得到很多大佬的指點和幫助例如@我亂寫的還有號稱從不玩知乎的小白,最後做到11月底,後來轉向去研究渲染和houdini。
動作系統實際上就是一個ACT的核心,當然你拿他做RPG也沒問題
大致分為美式和日式,
日式更多的是走的打擊感,操作性。
美式走的一般是真實感,而真實感需要大量的資源和黑科技加成,例如motion matching,
所以我的整個基礎是基於日式的風格做的。
我認為整個日式動作遊戲的3C水平大致可以這麼劃分:塞爾達-黑魂-只狼-鬼泣or獵天使魔女。
當然這麼分很不嚴謹,這是我的認知。
整體的導圖如下:
我在最後會把思維導圖的下載連結發出來,方便大家瀏覽.如果你對戰鬥系統很熟悉,可以直接跳過文章直接看思維導圖會更方便和直觀.更多的描述用於新接觸戰鬥的萌新方便上手。
我們分為幾個大類描述:
- 可配置性-可配置性決定了這東西做出來是否能用,如何配置一個怪物,配置一個角色,配置一個boss
- 動力學和動畫模組分開-這樣處理能避免大部分的奇怪問題.並且在結構上更為方便維護
- 狀態管理-狀態管理對玩家的輸入如何處理,前搖中段後搖如何處理,這裡我開始漏掉了,我朋友告訴我應該謝謝狀態管理,所以文章完成後扭頭來寫這個的時候其實我已經沒勁了,最後寫的實在是寫的很崩潰,因為內容太多,每個地方都要想半天當時怎麼做的,什麼思路,還要對照程式碼,如果這裡有不明確的地方希望有興趣的童靴給我留言,這裡我補充一點,unity的狀態機不是很好用,如果有工程能力的同學,建議自己手動管理,僅僅用animation controller的混合樹就好了,我就是這麼做的
- 動作的細節處理-這是一些經驗之談
- IK的簡單描述-其實IK的應用就那麼幾個點,具體的功能點就自己摸索摸索吧
- 物理和動畫的互相作用-這裡是進一步提升的方式,但是我並沒有做物理相關的東西
- 黑科技-如果你想把3C往更深了做這些方向可以考慮
可配置性1-角色模板
可配置性是一個框架是否可用的標準
所以我們放在第一個討論,這裡關係到你的工程能力,一般第一次做重構個3-4次太正常了
所以大家放心大膽的開發,後面多重構就好了,不用考慮一次性開發一個完美的系統。
如何考慮可配置性呢?我們需要從業務出發,抽象出我們需要的型別:
- 角色-怪物和玩家都屬於角色的一種
- 角色需要動作-動作讓角色動起來,每個不同型別的角色可能需要不同的動畫,但是角色之間有沒有共性?
- 如何播放?事件和角色的關係,這裡還要考慮AI,其他玩家操作輸入,網路等
讓我們進一步抽象
有沒有可能有幾種角色,長相差距很大,但是動作是類似的?例如拿刀的骷髏兵和拿劍的人類士兵,同時需要攻擊動作,和idle,和走跑
可能骷髏兵的攻擊只有兩下,人類士兵會多一個跳劈
並且我們支援非空判斷,如果特殊攻擊時空,就無法觸發
那麼從動作組上我們這樣分類這三個單位(骷髏兵-弓箭兵-人類士兵)
- 角色A-關聯動作(攻擊,idle-移動-特殊攻擊)
- 角色B-關聯動作(遠端攻擊,移動)
再此之外,還要考慮什麼事件可以觸發,例如攻擊就是攻擊事件觸發
可能特殊攻擊需要一個扳機狀態+攻擊觸發,
那麼基本上大思路就出來了,
我們需要一個模板A角色模板,支援配置模型動作組,以及一些引數
還有每個動作相關聯的事件,這樣的東西有較高的配置性.
我做了如下模板:
當然,你可以根據你的業務需求調整,
下面的bing action setting是用來繫結對應事件的
紅色的代表該bing action有問題
左邊是狀態,右邊是對應事件,none代表沒有狀態
這樣,我們的角色模板就建立好了
可配置性2-動畫組
然而關聯對應的動畫組,我們也需要考慮角色的動畫有那些型別
例如最簡單的idle-走-跑-攻擊-特殊攻擊這些動畫背後有關聯著那些內容呢?
idle-走-跑這三個被稱為locomotion是一個角色的基礎動作組
我這裡採用的是一個動畫組支援多個locomotion,放置一個角色有多重基礎動作
例如一個角色有錘子,和舉起錘子兩個狀態,舉起錘子的時候可以移動,那麼locomotion裡的移動動作必須全部換新的,並且這個角色還可以切換武器-太刀,那麼所有的動畫片又被替換了
所以最後動畫組是這樣的:
上面是一個基礎的locomotion,下面是對應的其他locomotion
再往下是具體的動畫業務,這裡最好的狀態是下面的動畫根據上面locomotion的切換也有一定的可編輯性,但是我當時並沒有做.
動畫片的意思是例如攻擊,[idle-走-跑],翻滾,這些動畫的型別如何處理
我們當然可以直接播放動畫片,但是一個動畫片包含了很多可能性,這些可能性我們應該做成可配置性的
locomotion的做法我採用了是否的選擇,例如考慮到巨型怪物可能只有走,
或者某些小型怪物只有跑,走和跑還有idle都是用於的可選項
locomotion動畫片的選項如下:
你可以考慮是否有疾跑,跑,和走
很關鍵一點在於生成locomotion以及對應的混合樹,我把最複雜的混合樹截圖出來,其他的大家自己研究吧,有問題可以留言。
這裡的關鍵點在於走和跑的分離,這樣在左右橫移的時候不會出現這樣的狀態切換[左橫跑-左橫走-idle-右橫走-右橫跑],雙層混合樹的好處在於直接變成:[左橫跑-右橫跑]
當然,直接八向混合也可以,但是如果追求細節不要這麼做.
最基礎形態就是全部取消,只有idle:
因為動畫狀態特別多,如下:
- public enum AnimationType
- {
- None, //基礎狀態
- Locomotion, //基礎運動狀態
- Animation, //普通動畫
- Combo, // 攻擊,連擊
- MaskAnimation, // 遮罩動畫
- LoopAnimation, //迴圈動畫
- BeAttackedSimple, //單向簡單被擊
- BeAttackedFourDir,//4向被擊
- BeAttackedFourDirTwoAnim // 4向被擊, 每個方向又支援兩個不同被擊(伴隨攻擊方向切換)
- }
我在用一個典型的舉例,就不多講了
如果討論動畫組,不討論combo也太不厚道了
combo我大致是這麼做的,可以支援多個動畫片,在播放時根據長度連續播放這樣就支援連擊了,而且可以選擇遮罩,例如只有上半身,只有下半身,每個動畫片繫結自己的前搖和後搖。
還有是否支援root motion等
再舉個例子就是被擊:
被擊可以選擇有效圖層和具體播放動畫片的朝向,這個根據你的業務具體安排。
其他例如loop動畫,普通animation,就是可以配置前搖後搖時間即可,loop要支援三個動畫的迴圈,在動畫播放結構中也需要支援。
動力學和動畫模組分離
這裡的核心思想是:
PlayController需要將輸入交給動力學元件,同時將動力學元件的內容,交給Animation元件。
需要根據真實移動速度來決定動畫狀態,而不是輸入向量,基於這個大的思想,可以保證一些奇怪的問題不要出現。
而動力學的核心在於處理特殊情況。
這裡的類結構大概是這樣:
Kinematic大概有幾個大的業務要考慮清楚:
- 撞牆-撞牆的處理關鍵在於不要穿的太厲害,當動力學元件遇見牆體時候,Rootmotion依舊會執行,這時需要同步角色位置到當前動力學元件的位置,這個是基礎。
- 邊緣檢測-邊緣檢測在於下滑,一般人物會用一個膠囊體,這個膠囊體會卡在邊緣,這裡要處理的平滑,下落既是下落,而不下落時人物要站紮實不要抖。
- 跳躍1-原地起跳-原地起跳最好用一個獨立動畫,問題的關鍵是當前跳的落點是高低不平還是平面,因為資源和時間的問題,我直接用跳躍處理的這裡,當動畫播完還沒落地,我就認為地面是不平的直接過渡到跳躍迴圈。
- 跳躍2-衝刺起跳-當玩家加速跑時,這個起跳必須和普通跳躍不同,否則沒有那種速度感,同時向前躍起,這裡最大的坑在於可能你剛起跳就撞到物體了,好一點的或者美式動作遊戲會處理一下,給個撞擊動畫,但是有些遊戲也不處理,尤其是日式遊戲,硬播完對玩家來說並不是不可接受的事情,衝刺起跳後落地最好也接一個落地動畫,例如翻個跟頭,而撞牆就不適合播放,這裡具體如何處理就要看GamePlay的愛了...
- 跳躍3-向前跳跌入懸崖或者落地-跳躍其實分為是哪個部分,起跳,loop,跳躍落地,落地又分為下落時間過長的大硬直和下落距離不大的小硬直。
- 爬梯子1-分為三個狀態,上梯子,下梯子,和爬,這裡最好給一個固定動畫,由程式控制正播或者倒播,比較麻煩是對上點,並且要動力學元件配合,這裡還有個做法就是用ik讓手和腳找梯子的掛點具體就看GP的愛吧...
- 爬梯子2-還有一個坑就是爬梯子的時候,被擊怎麼處理,黑魂裡是給人物一個抖動,死了就直接跌落。
- 爬峭壁-這算是比較噁心的一個點了,爬峭壁的核心在於配合IK以及關卡設計,以及龐大的動畫狀態,這個狀態屬於一個全新的locomotion,我當時只是試了一下掛在峭壁上,然後按跳躍就播放跳躍,然後扒到下一個掛點。
允許我偷個懶,多餘的就不寫了,有問題請評論追加...
狀態管理
首先unity的animation controller提供的混合樹非常好,但是狀態卻又一些不疼不癢的bug,例如A狀態到B狀態的過程中,切換C狀態這時會出現閃一下切過去,上下半身的動作會又互相影響,修正起來既蛋疼,又麻煩,所以我乾脆就自己管理狀態,讓unity直接執行就好了,手動管理狀態,把ac內部的混合樹當一個狀態呼叫。
而和狀態在一起的,還有一個關聯專案就是對輸入的處理。
輸入可能有三個來源
- 玩家手柄或者鍵盤
- AI行為樹
- 網路
不管哪個來源,我們可以用同樣的抽象層讓輸入統一,
輸入分為幾個型別
- 普通事件-不要讓玩家的輸入直接操作動作,一定要做一個轉換,尤其是移動,移動的朝向交給動力學,動力學作用於動畫系統,而按鍵輸入一定要轉化為一個類似行為的抽象。
- 狀態轉換型輸入-某些按鍵實際上是一個狀態,例如,玩家按下收刀實際上角色要進入到一個收刀的狀態,此時攻擊鍵變成了一個特殊攻擊,相對應這個狀態下的輸入都出現了變化,所以一個行為應該是基於狀態的,關於這個狀態和事件的區別大致是這樣的:
這個狀態手柄上一般會用扳機鍵
- 輸入的時效-一般一個動作分為三個階段-前搖,執行中,後搖,你可以指定三個階段那個是有效輸入階段,例如我一般會遮蔽前搖的輸入,執行中是有效輸入階段,後搖就處理玩家輸入。
- 輸入指令的重排序-這裡很重要的是當一個動作執行中,玩家的輸入要如何處理,後搖就開始執行之前輸入的動作進入預混合階段,而且後搖這個時間點我推薦對動作進行排序,例如當前是攻擊,那麼要做一個輸入的優先順序排序,優先順序最高的可能是下一個攻擊,而翻滾之後優先順序最高的可能是喝血,不要根據玩家的最後一次按鍵去執行,這裡對感受的提升是巨大的。
動作的細節處理
攻擊和翻滾相關:
*攻擊,翻滾的前搖最好不要鎖方向,這樣玩家容易攻擊之後怪物因為移動躲開了,最好的量我感覺最好根據不同動作,每個單獨設定。
*攻擊-攻擊的核心在於Root Motion,但是細節又有好多講究,例如如何定幀,是真的停頓還是減速,攻擊的碰撞又有幾種方式,有直接繫結碰撞盒的,有攻擊最後一個傷害幀算扇形面積的,攻擊中還可能有被擊,被擊怎麼處理。
*攻擊還有一個特性就是3D場景下的攻擊,容易讓玩家產生錯誤空間感受,所以要增強玩家在3D場景下的攻擊範圍,或者敵人傷害的觸發範圍,這個要結合是否有PVP單獨調整。
*翻滾翻滾我因為動作資源的限制用一個翻滾,然後角色轉向的方式處理,其實最好的方式應該是8個方向分別用獨立的動作,翻滾很重要一點是啟動的時候,需要給一個旋轉的時間,也就是前搖不要鎖方向這一點是通用的。
locomotion相關:
*locomotion其實決定了一個手感的基礎,大部分的動作都是由locomotion過渡的,這裡雙層混合樹是指第一個混合樹用來做當前速度,朝向的判斷,第二層有三個對應的混合樹。
idle,當沒有速度的時候,就預設idle
走,當速度不夠跑的時候,就預設用走
跑,速度夠的時候就切換到跑,之所以要把跑單獨出來,是因為有一個特殊情況,就是玩家在向左平移時,突然向右,有一個瞬間會速度到0,例如從左到右速度會這樣變化:[1,0,-1],此時如果走和跑用一個混合樹,動作會過渡到走,然後過渡到跑,這裡會有一個微小的卡頓,很不舒服。
直接根據速度和方向切換到走跑,這樣在一個平移中,例如向左橫移,突然向右,會有一個微小的過渡卡頓,跑-走-跑,而實際上這是不符合人的移動習慣的,但是在一個情況下例如怪物沒有走路的動畫只有idle和跑,或者沒有跑步,只有idle和走,那麼可以用單層混合樹搞定全部
特殊動作處理:
在某個武器的狀態中,要支援一個或者多個特殊狀態,例如太刀的收刀,大錘子的蓄力,有些特殊動作會禁止移動,有些特殊動作釋放中可以移動,那這裡我感覺最好是切換locomotion。
切換武器實際上相對應的很多動畫都要切換,我這裡用的是直接切換全套動畫組來處理,例如雙刀切換到單手中劍,這連idle都切換了。
被擊
被擊實際上是打擊感的核心,一個動作的受力做的極其好,但是沒有攻擊物體時,你是感受不到力量的,但是一個動作做的一般,但是被擊做的非常到位,此時你可以感受到攻擊後的力量,這個力量感就是被擊表現,被擊的核心有幾塊:停頓配合,擊退距離和攻擊移動距離要配合,連續攻擊後擊飛,,音效,特效等等。
被擊方式1:攻擊原地不動,被擊者微小後退,幾下後擊飛或者退出攻擊距離(塞爾達),這是一種對怪物的保護,連擊幾下後怪物就被擊飛
被擊方式2:攻擊者前移,被擊者後退(黑魂)
被擊方式3 4向被擊-四向被擊對被擊的體驗提示是很大的,而且被擊本身最好支援Rootmotion,攻擊物件被擊後後退對被擊物件也是一種保護,拉開與攻擊者的距離,還要配合擊倒,並且可以支援4向-同時支援每個方向根據攻擊角度不同採用2種不同被擊。
擊倒-這其實是一個保護性動作,擊倒后角色不可以被二次攻擊,當然也有可以被攻擊的鬼泣裡的就有這裡就看具體策略了。
硬直中的被擊處理
硬直被打斷-直接轉入被擊,這裡的處理沒有特別好的辦法,被擊的關鍵在於快速反饋,直接決定手感是否刀刀入肉,所以如果連續被攻擊,就會出現抖動,如果例如被4個人前後間隔不到一秒攻擊4下,這裡可能要特殊處理是否要從第一個被擊直接過渡到第四個中間2個幹掉一個甚至直接幹掉2個。
硬直沒有被打斷-硬直動畫例如蓄力攻擊中被攻擊有可能不會破壞硬直效果,那此時最好混合一部分被擊,讓人物有一定抖動,否則也會很假。
處決
處決的核心在於把兩個角色的相對位置弄的差不多,比較糙你就直接滑過去,然後兩個動畫的同步播放,例如黑魂的背刺,你到達指定位置可以觸發了,我們們就直接滑動調整位置,一般處決玩家就無敵了,只狼也是這麼做的。
另外一種就是類似QTE的,這一種又分好幾種,例如莎木的就比較弱雞,但是戰神的就比較猛,這個我沒做過。
Gameplay到過場動畫的無縫銜接
攝像機平滑過渡的切換和角色動作的切換,這個沒做過,難點在於攝像機和角色如何抵達預定位置,中間還是平滑的,看看戰神...即便不做成戰神那樣,這個細節量也很大。
關於IK
我是用的final IK解決我的ik問題,所以這裡我不展開講了,主要處理這幾個問題:
- 樓梯上腳懸空的處理
- 開門是用ik還是固定動畫
- 拿桌上,抽屜內物體
- 死亡後的紙娃娃效果
- 頭部朝向鎖定目標或者場景內重要物品
物理和動畫的相互作用
物理這裡完全沒做過,不過聽某些大佬講,這裡處理好可以增加真實感,例如攻擊的時候被擊,被擊沒有打斷攻擊狀態可以加一個10-30%的物理狀態的抖動到攻擊身上。
例如你被前面的敵人攻擊然後背後也有人攻擊你,此時如果不處理就是抖動到背後的被擊了,因為被擊必須快速切換,響應慢了就假了,被擊直接影響手感,聽某些大佬說可以考慮混一點物理,這樣抖動的效果會更好,但是我並沒有試過。
這些黑科技
motion matching是育碧搞的一個動作匹配技術,基於目標的位置和方向速度通過演算法從資料庫中取用匹配動畫,需要大量的動畫片支援,同時還要預判斷未來地形變化,總之很黑科技,沒有足夠的動畫資源基本沒辦法做,美式動作遊戲或者冒險遊戲裡大量的使用該技術。
例如當一個角色的動畫是變速的時候,如何保持動作的受力感受同時又可以變速,例如某個技能可以根據玩家輸入加快速度,或者減慢速度,某些遊戲會考慮嘗試多套動作,但是高階動作遊戲例如鬼泣,貝姐,顯然不是這麼做的,至少我感覺不是這麼做也可能是我感覺錯了。
動作中斷後如何和下一個動作保持良好的銜接-好吧,講的直接點,我實在不知道鬼泣和獵天使魔女怎麼那麼靈活還那麼流暢的,不管我怎麼處理混合總感覺混合時間不夠,或者動作幅度特別大就變的很奇怪,這裡我感覺暴力一點就是做大量的中間動作片加強過渡,不過只能是猜測了。
結語:
嗯能看到這裡的都是真愛
希望有一天我也能開發出像黑魂,只狼這樣遊戲設計和技術完美結合的遊戲
而且有很多細節介於主題太大了,我也沒勁寫了
歡迎大家跟我討論
我有一個網盤,裡面放著我做的一些東西
思維導圖我也放裡面了.
也歡迎下載
連結:https://pan.baidu.com/s/1lLxvffJuN7NEds4mbNYPLg
提取碼:9vb1
作者:lingzerg
專欄地址:https://zhuanlan.zhihu.com/p/67143501
相關文章
- 動作遊戲戰鬥系統總結歸納&思考(中)遊戲
- 備戰軟考06——作業系統概述作業系統
- 動作遊戲戰鬥系統框架總結歸納&思考(上)遊戲框架
- 動作遊戲系統設計概述遊戲
- 作業系統(1)——作業系統概述作業系統
- 作業系統(一):作業系統概述作業系統
- 《戰雙帕彌什》戰鬥系統解析:適合手機的動作遊戲遊戲
- Linux作業系統相關資料Linux作業系統
- Linux作業系統概述Linux作業系統
- 作業系統相關知識總結作業系統
- java與作業系統相關的操作Java作業系統
- Linux作業系統相關內容介紹!Linux作業系統
- 石頭剪刀布?多人動作競技遊戲《永劫無間》戰鬥系統簡析遊戲
- 作業系統學習(1)-概述作業系統
- 如何以戰鬥為基礎驅動玩家追求更多角色(一)
- 人工製作 vs 系統自動化:《神祕海域4》 中的戰鬥AI平衡 解讀AI
- 戰鬥解析完成!「#COMPASS戰鬥天賦解析系統」公測開啟
- 談談ACT手遊戰鬥系統
- 【作業系統】記憶體管理概述作業系統記憶體
- 日誌系統相關
- 今日正式發售《夜血:復仇之潮》開啟動作闖關新戰鬥
- 第一章 作業系統概述作業系統
- C++系統相關操作3 - 獲取作業系統的平臺型別C++作業系統型別
- 《碧藍幻想:Versus》的創新戰鬥系統
- Spring(一):Spring概述及相關概念Spring
- 楚留香戰鬥系統拆解與製作(三):基本行為之普攻邏輯拆解
- 鐵與玉!《影之刃3》沐小葵角色戰鬥首曝!
- 向死而生:《血源詛咒》的戰鬥系統解析
- 廣告系統相關術語
- 高校郵件系統配置相關
- linux系統相關概念與配置Linux
- 系統利益相關者描述案例
- Linux系統管理-系統概述Linux
- Owlchemy實戰分享:三個擴大環境互動、角色和系統方面的案例
- 【GDC 21】《對馬島之魂》戰鬥系統講解
- 作業系統-Operating-System第一章:概述作業系統
- 【Linux系統】fdisk相關分割槽命令。Linux
- linux系統配置及相關檔案Linux