王昊翔,丁海洋
(西京學院信息工程學院,陜西西安,710123)
近年來,國內的主機游戲市場不斷的發(fā)展壯大。隨著技術的不斷成熟,越來越多的廠商和工作室也開始投入到單機游戲的研發(fā)中。許多優(yōu)秀的單機游戲產品,如雨后春筍萌芽。像《黑神話悟空》、《失落之魂》、《暗影火炬城》這些動作游戲都是由虛幻引擎開發(fā),并以爽快的即時戰(zhàn)斗作為賣點。國內著名的三劍IP,《仙劍奇?zhèn)b傳》、《軒轅劍》和《古劍奇譚》的最新作品也由傳統的回合制戰(zhàn)斗轉向了即時戰(zhàn)斗的動作類游戲,其中前兩者的最新作品皆由虛幻引擎開發(fā)。
本文使用虛幻引擎對時下流行的即時戰(zhàn)斗的動作類游戲產品的重要系統之一的受擊反饋系統進行了研究,結合虛幻各個模塊功能,設計了一套受擊反饋系統,通過該系統的設計來探索動作類游戲的核心體驗。
虛幻引擎是由著名游戲公司EPIC開發(fā)的開源的通用引擎,面向企業(yè)、工作室、個人等不同程度的開發(fā)者提供游戲開發(fā)所需要的核心技術、數據生成工具和技術支持。
作為全球最開放、最先進的商用引擎,基于C++開發(fā)的虛幻引擎在底層擁有很強的拓展性,同時對于上層開發(fā),虛幻引擎也提供了藍圖這樣的解決方案,減輕了非從業(yè)者和業(yè)余開發(fā)人員的上手門檻。擁有完整的開發(fā)流程和渲染管線的虛幻引擎是一套非常優(yōu)秀的開發(fā)工具,不僅可以應用于獨立作品,也同適用于各類3A級大作的開發(fā)。能夠提供多種解決方案的虛幻引擎被用于游戲行業(yè),同時在建筑、汽車、影視、實況活動、以及訓練與模擬等行業(yè),虛幻引擎也同樣大放光彩。在它20多年的歷史里,虛幻引擎久經考驗,贏得無數開發(fā)者的認可,產出無數優(yōu)秀的作品。
目前主流的動作游戲中,打擊感的體現主要來源于打擊動作發(fā)生時產生的一系列反饋,這種反饋包括打擊時產生的打擊特效、音效、擊中瞬間卡幀、揮舞動作之間幀速率的加減速、UI特效、屏幕震動、手柄震動、受擊角色對應的受擊動畫和受擊部位的膨脹和抖動、鏡頭角度變化等效果。因此打擊感是綜合了視覺效果、聽覺效果、觸覺效果等多方面得來的,如圖1所示。根據具體游戲的不同,或者是一款游戲不同類型的受擊目標,這些反饋效果的細節(jié)的處理也是大有不同。
圖1 受擊反饋的體現
虛幻引擎在開發(fā)游戲的時候通常有兩種動畫方案,一種是原地動畫、另一種是根骨骼動畫。原地動畫不包含根位移,在虛幻引擎中可以通過播放原地動畫的同時,可以通過移動角色的膠囊體來使角色產生相應的位移效果,這種方式可以讓一種動畫適應多種場景,但是通過代碼調試出來的效果往往也會缺失真實感和流暢感。在動作游戲的制作,想要達到比較真實的效果的時候,通常可以將位移信息存儲在動畫中做出根骨骼動畫,這種動畫雖然少了一些使用的靈活性,在適應多種情況的時候也增大動畫的工作量,但是確能換來較為真實的動畫表現。因此本文所設計的受擊反饋系統,在受擊動畫的表現上均采用根骨骼動畫來混入、混出,表現一種較為真實的受擊效果。
受擊狀態(tài)的發(fā)生通常在攻擊檢測完成后,或者受擊角色與場景內的物體產生了互動,例如有巨石滾下與受擊角色發(fā)生了碰撞。在虛幻引擎中,后者可以通過在角色和物體產生碰撞時,借助引擎自身的物理引擎效果,開啟角色物理模擬來實現布娃娃效果。本文的受擊反饋系統同樣也借助引擎自身的物理模擬效果著重考慮在攻擊檢測完成后,受擊角色通過受擊的方向、受擊的部位以及受擊時的沖量使受擊的部位產生一定程度的抖動,通過這種抖動來反應一種比較真實的部位受擊效果。
所有具有受擊反饋需求的角色模型在導入引擎中時需要具備較為完整的骨骼信息,根據角色骨骼信息建立物理資產。在虛幻引擎中,可以通過其自帶的物理模擬系統,使角色產生比較真實的物理反饋,其中角色的物理模擬效果,很大程度上取決于物理資產的設定。在物理資產建立的時候,我們不需要為每一個骨骼建立相應的物理資產,重點為那些帶有驅動其它部位運動的部位添加物理資產,并通過實際模擬出來的效果調整各個關聯部位之間的物理資產的偏移限制如圖2所示。
圖2 角色物理資產設置
在受擊情況發(fā)生后,角色會從現有的動畫狀態(tài)跳轉到受擊動畫中去,為了實現動畫效果比較流暢的過度,本文采用虛幻引擎自帶的動畫蒙太奇功能來進行受擊動畫的混入和混出。通過將準備好的帶有受擊位移信息的受擊根骨骼動畫以片段的形式被動畫蒙太奇調用,在接收到受擊信息的時候,根據相應的受擊方向信息來觸發(fā)運用動畫蒙太奇方式播放相應的受擊動畫片段。例如,當角色受到來自自身右側方向的攻擊時,蒙太奇會調用標記有右側受擊的根骨骼動畫片段進行混入播放,如圖3所示。
圖3 蒙太奇動畫設置
當攻擊角色做出攻擊動作后,根據獲取預先設置在攻擊角色武器上的插槽位置,可以打出符合武器揮動軌跡的射線檢測,射線檢測在與有效的受擊角色發(fā)生重疊后會通過一系列的邏輯向受擊角色發(fā)送武器的攻擊方向,擊中點的部位、所產生的攻擊類型和依據攻擊類型所產生的沖量數據,并在受擊點位播放對應的打擊特效和聲效,應用UI特效和屏幕震動。受擊角色會根據傳遞過來的數據計算出攻擊相對于自身的方向來源,并將該數據和擊中部位、受到的攻擊類型和攻擊時產生的沖量發(fā)送給處理角色動畫的模塊中去,動畫模塊根據角色受擊的方向、和受到的攻擊類型通知動畫狀態(tài)機來混入對應的受擊動畫,再通過開啟擊中部位的物理模擬和沖量數據來反應受擊部位的物理抖動效果。如果游戲設計上有些視覺沖擊效果的需求,也可判斷沖量超過一定部位承受閾值后,做一些受擊部位產生破碎或者斷裂的效果。受擊反饋系統的整體流程設計如圖4所示。
圖4 受擊反饋系統的流程圖
(1)攻擊檢測模塊,該模塊采用虛幻引擎的actor組件類型,在虛幻引擎中actor組件可以附加在所有actor類的派生類,因此采用該類型組件可以讓攻擊檢測功能復用在所有具有攻擊需求的角色類上,如圖5所示。模塊中需要初始化角色類上綁定的武器,在所依附的角色播放攻擊動畫時觸發(fā)攻擊檢測邏輯,并在有效擊中產生后,通過武器上插槽前一幀的位置和當前幀的位置計算出當前幀的攻擊方向,并收集擊中點的部位、攻擊類型的數據并通過攻擊類型和武器數據在利用結構體創(chuàng)建的FAttackData數據表如表1中查找對應攻擊的沖量數據,再將攻擊方向,擊中點的部位、攻擊類型和攻擊類型所產生的沖量數據傳遞給被擊中角色的數據接收接口,同時調用播放打擊特效、受擊聲音特效、UI特效和屏幕震動的接口。該模塊同樣提供接口用以改變不同打擊特效、聲音特效、UI特效和屏幕震動來應對不同的角色和不同的攻擊環(huán)境。
圖5 角色類自身組件圖
表1 FAttackData數據表
(2)可被攻擊接口,該類接口應用與所有可被攻擊的角色類上,如圖6所示。接收攻擊對象身上攻擊檢測組件所發(fā)送的攻擊方向,擊中點的部位、攻擊類型和攻擊類型所產生的沖量數據,通過當前獲得的攻擊方向數據和當前受擊角色在場景中的位置和旋轉信息計算出角色受擊的方向,再將角色受擊的方向、擊中點的部位、攻擊類型和攻擊類型所產生的沖量信息傳遞給角色的動畫模塊。
圖6 角色類自身接口實現圖
(3)動畫模塊,動畫模塊是依附于角色身上的動畫管理組件,同樣繼承于虛幻引擎的actor組件類,負責接收數據改變角色當前的狀態(tài)來通知角色的動畫狀態(tài)機播放對應的動畫狀態(tài)和調動擁有者的mesh來播放對應的蒙太奇動畫。動畫管理組件自身帶有觸發(fā)多種角色動作情況時需要采用的處理邏輯,受擊情況也作為其中一種情況被處理。當角色的動畫組件在接收到受擊數據后,通過可被攻擊接口傳遞過來的受擊方向、攻擊類型來調動擁有者的mesh組件通過蒙太奇播放對應的受擊動畫片段,并通過獲得和使用蒙太奇上預先設定好的混合權重曲線來覺得受擊部位物理模擬的時間和模擬權重大小,再通過擊中點的部位、沖量數據來決定受擊角色受擊部位的物理抖動效果。
各模塊類關系圖如圖7所示。
圖7 受擊反饋系統類圖
本課題研究的受擊反饋系統對當前主流的動作游戲的打擊感問題提出了解決方案,希望以流程化的方式完成人物受擊效果的實現。通過一個整體的框架完成主要受擊過程,再通過更改動畫數據、特效和音效資源來適應每一個受擊個體。希望通過該系統的設計可以減少整體的代碼邏輯工作量,增加動作游戲受擊反饋的真實感,增強游戲代入感和整體的體驗質量。