張瀚榮:如何用UE4制作3D動作遊戲

據報道/ 6月5日,2015年第三期據開放日‧虛幻引擎專場活動在上海正式舉行,此次活動由Epic Games與據聯合主辦。

動作遊戲憑借爽快的打擊感和強烈的操作感一直受到玩傢的喜愛,但一些高品質的3D動作遊戲設計其實頗有難度,國內市場上常見的大多是橫版2D遊戲。本次活動上,Megafun的創始人張瀚榮來分享瞭利用UE4引擎制作3D橫版動作遊戲的心得。

張瀚榮

張瀚榮從策劃的角度分析動作遊戲的制作流程,“先制作2D草圖,通過這些草圖檢驗動作的合理性,然後轉化為3D模型,最後把這些動作變成招式。”隨後張瀚榮著重介紹瞭UE4中通知系統的強大功能,“遊戲中輸入的判定、聲音、音效、特效、傷害、傳遞給敵人的狀態、取消機制、攝像機的抖動、定幀等所有事情都可以通過通知來完成”。

“傷害區域判定是難點”張瀚榮介紹瞭傷害判定設計的方法,“通過在人物身前編輯各式碰撞盒子,並通過Notify state控制這些盒子的開關以及變換”此外張瀚榮還分享瞭動作遊戲中緩沖和取消機制的設計,“一個是簡單的連招Combos,第二個是角色的特定能力包括角色的跳,還有剛才看到繩子的勾爪,把自己可以勾回去的那種,還有還有一些技能,然後設計這三者的總體邏輯”。

演講最後Megafun的程序員具體演示瞭Notify state的使用方法並介紹瞭其優點,包括保證兩個函數成對,方便設計者進行管理。

以下是演講實錄:

張瀚榮:大傢好!我們公司正在使用虛幻4引擎在做一款3D的橫版動作類遊戲,目前代號“TTW計劃”,團隊在深圳。目前計劃的平臺隻有PC和主機兩個,手遊並沒有考慮太多。然後也計劃在7月底China Joy發佈一款試玩版。

首先看一段視頻,因為我們的遊戲太大瞭,有二十多個G,所以視頻也是我花瞭一個通宵時間剪輯的,還有不少Bug的時候,比較粗糙,大傢可以關註我們下一個月的版本。

動作遊戲

先制作2D草圖、再轉化為3D模型

這次分享主要是我們如何使用虛幻4引擎來做一個動作類的遊戲。經典的動作遊戲有很多,比如說戰神系列,鬼泣系列,還有國產的雨血等,都是在動作打擊感上做得比較好的遊戲。但很多人在做動作遊戲的時候都會覺得它特別難做,摸不著它的門道。

動作遊戲

動作遊戲

動作遊戲以我一個做策劃的角度來講主要分為三個方面:視覺、聽覺、觸覺,觸覺就是連擊操作的手感。我們的工作流程是這樣的,首先制作2D的動作草圖,通過這些草圖的設計就可以看出動作合理還是不合理。然後根據這些草圖在UE4裡面做成3D模型的動作,並通過UE4中自帶的Cascade這樣一個工具來做特效。最後把這些動作變成一個招式,會在Montage中配置事件,這部分的事件非常多,非常煩瑣,並在Animation Sequence中配置特效與音效。

動作遊戲

動作遊戲

這是一個簡單的制作流程圖,就是把工作任務拆分到不同的人員身上,而這一切的主題就是 “通知”。無論是Montage還是Animation Sequence中都會用到UE4裡面獨特的設定,叫Notifies,在下面這個位置。

功能強大的“通知”系統 控制連招判定 插入招式特效

動作遊戲

通知是幹什麼用?通知是動畫在特定的位置、特定的區域來做特定的事情。特定的事情包括哪些呢?包括輸入的判定,聲音、音效、特效、傷害、傳遞給敵人的狀態、取消機制、攝像機的抖動、定幀等所有事情都可以通過通知來完成。

動作遊戲

手感的來源其實第一個就是連招輸入的判定,當你一招打出去要連下一招的時候,判定的時間是否合理的。對於手殘黨,像我這種來講,我就會要求一個比較長的一個判定時間。但是對於高手來說,它可能更希望硬核一點。

緩沖我們的手感分為兩個通知,包括一些即時響應和緩沖機制。緩沖機制是指獲取玩傢輸入後,等待動畫播放到某一幀後才跳轉到下一段連招。即時響應就是獲取玩傢輸入後,馬上跳轉到下一段連招。

動作遊戲

那麼我們在裡面在裡面我們是如何配置的呢?可以看到下面這個叫Attack Anim Notify State是我們制作的緩沖機制的判定,然後下面Stop Delay Notify代表不接受按鍵輸入。也就是說在這一長度幀數裡面,動作是允許跳轉到下一個招式,但是最早的兩幀內已經開始接收判定輸入瞭。

動作遊戲

特效很簡單,就是在特定的某一幀做動作的特效,包括一些揮刀的音效。聲音格式是WAV(16bit)的。

傷害區域判定是難點 編輯各式碰撞盒子

動作遊戲

還有一個比較重要的是傷害區域的判定,這是動作遊戲裡面最難也是最核心的。這張圖是引用《街霸4》裡面框的藝術截圖,他們分好多種的框。而我們實際需要的遊戲框並沒有這麼復雜。

動作遊戲

我們隻需要在特定幀段判定攻擊,過瞭這個幀段就不判定攻擊瞭。通過自動調節判定框大小,調節判定框數量,來輸出攻擊所傳遞給每個受擊者的狀態。比如說這招打出去是需要傳遞它是浮空的狀態,擊倒的狀態還是普通僵直的狀態。

動作遊戲

這是之前做的Slnow的配制表,我們通過Slnow的配制表來配置這一系列傷害框裡面的一些信息,這個Startswing就是傷害的通知。然後在UE4的編輯器調節這些碰撞盒子的屬性,所做盒子的位置,就是人物身前的位置。

動作遊戲

我們也可以用通知系統去實現給角色自身添加一系列的狀況,比如說在特定的某一幀給角色增加一個霸體狀態,也可以無視一切碰撞檢測,相當於無敵,蓄力、飛行、延遲出招等一些狀態都可以通過通知實現。我們這裡Charge,就是一個蓄力的通知,表示人物在蓄力需要重復播的一段動畫。

緩沖和取消的機制的設定

動作遊戲

動作遊戲中也有緩沖和取消機制。緩沖是指這一招是否可以取消?相信大傢玩過DNF它有一個後跳是強制取消所有招式和狀態的,就是動作遊戲的招式,你一招是否能取消?是馬上取消還是要等到這一招出完又沒有收招可以被取消,還是你的招式被特定類型的招式取消呢?這一系列設定非常核心非常細,但是都可以通過通知完成。

動作遊戲

我們遊戲中招式分三種,一個是簡單的連招Combos,第二個是角色的特定能力包括角色的跳,還有剛才看到繩子的勾爪,把自己可以勾回去的那種,還有還有一些技能。總體邏輯是連招自身不能被打斷,但是技能可以打斷你的連招,能力也可以打斷連招,技能是不能被任何東西打斷,能力是可以無視幀數,在出招沒開始的時候就打斷當前的招式。

動作遊戲

我們這裡有一個Skilljumping notify,就是技能的取消機制,連招的取消機制剛才也說過,在這兩個區域之內是可以取消的。

剛才我講的通知是出於策劃的角度怎樣配置這一系列的事件,接下來程序員會講通知裡面怎樣運作的。

Begin,End,Tick和GetNotifyName四種方法重寫Notify state

Megafun程序員:大傢好!我來跟大傢講一下如何編寫通知的邏輯。在UE4,特別是做動作遊戲的時候,角色揮一刀過去,在特定的某一幀需要執行一系列的操作,而這一系列的操作會有很多的功能。我們現在通過一個實例來分析一下,我們怎樣去編寫。

比如說一刀揮到這邊來,此時傷害的碰撞格應該是進行開啟,而在開啟的過程中比方說他打到那邊去,就需要關閉盒子。我們通過一個Notify state,來控制碰撞盒的開啟、關閉以及變換。

動作遊戲

具體操作很簡單就是點擊Open Full Blueprint Editor,打開NotifyState編輯界面。它有4個方法可以被重寫,分別是Begin,End,Tick和GetNotifyName。在Begin的時候,就說明我接受到這個事件,所產生的事件的。End也是同理。Tick則是Begin和End之間Tick的事件,它有一個參數Deltatime。那Getnotifynoame就是我想看一下現在哪個Notify在起作用,但是我們一般不會用。

動作遊戲

詳細邏輯是在Begin的時候,在人物身上掛很多的碰撞盒,Begin時將盒子開啟。在Tick,我們有一條Curve曲線,根據傳入的曲線有一些變化值來調整碰撞盒的狀態,可能是位置、大小也有可能旋轉。在End的時候找到碰撞盒,然後將它關閉就可以瞭。其實代碼比較麻煩,但是實際上偽代碼就這麼一點點,非常簡單的一個信息。

動作遊戲

配置是這樣的,有一個Begin,中間就會產生Tick事件,然後我們會用一個用於編寫動作遊戲中碰撞盒的開啟和關閉的邏輯。我們看到這裡有三張圖,這裡一個測試盒來進行這樣的演示,可以看到這是在第一幀,發現第一幀非常小,然後到那邊是一個Tick,然後逐漸變大,這是我們當時實現的碰撞盒,這就是碰撞盒所對應的一個物體。

Notify state的好處:保證成對,方便管理

為什麼我們用Notifystate,而不是用兩個Notify+Player的Tick函數?首先是說我們有Begin,我們就要有End,叫成對調用。不可能一刀砍下去,這個盒子開瞭,或者在這個期間我被怪打瞭,我要沒有調用到這個End的這個盒子就會一直開著,那樣就出事瞭。

所以我們需要保持它是成對調用。在Notifystate,通過動畫打斷的一個事件,保證它調用Notifystate的End的函數,可以保證與Begin的成對調用。此外就是Begin、End、Tick他們三個是在同一個BP裡面方便我們進行管理。所以建議使用Notifystate實現在動作遊戲中玩傢碰撞盒的開啟、關閉。

我你們采用的是基於碰撞盒的武器攻擊點,其實我也研究過,但是我想過另外一種方案,基於線性射線檢測的方案。例如手裡的任何一把長柄武器,我在武器上定兩個點,每一幀進行檢測,一旦產生碰撞就認為攻擊成功。

張瀚榮:之前有考慮過通過一些,比如說直接在武器上綁定一個盒子,或者是通過一個特殊的方法去做一些檢測,但是考慮到因為我們的動作非常快,每一次出招時間非常短。在這個過程中如果在武器上掛一個盒子會非常短,可能隻有一幀,但是我希望我們的打擊幀數在3幀以上的判定。

另外一點是我們的特效會做得比它的招式動作本身要誇張。比如說我一個角色實際上沒有位移,剛才視頻裡面有一個鏡頭,就是向前這麼大的圓弧的時候,沒有任何角色位移,角色還是在原地,但是一瞬間就回來瞭。這種情況下隻能通過在人物前方擺放盒子來實現。

Comments are closed.