(原)利用Unreal實現動作類-打擊感部分2


@author : 黑袍小道

查看隨緣,轉載標黑袍。

 

(

分享原因:

1、都8102 世界體了,不是核心底層技術不用藏着(太多可購買可參考了那啥了),這種是游戲人都知道,而且都是基礎。總結而已罷了。

2、實例永遠只是實例,也只能只是。關鍵是反推到底層,和做法(這個才能產生變化,引擎和語言,可以做到NX,也可以做到SX 嘿嘿。

 

前言

在利用Unreal實現XXXX,其實實現方式和對應的設計(都有很多種,關鍵看緣分?開玩笑,這很多要看個人理解。在這部分只說原理和對應實現,盡量保證邏輯單一,可以配置,編輯器可以跳轉到其他部分后面會補上對應的編輯器制作。)

(這個差了一下同步)

(有代表性的拳皇,格斗是一種,什么DNF,鬼泣,獵天使,屬於一種,騎馬已砍殺是一種,黑魂、戰神這些又是一種。奇跡,還有俯視角的許多就有很多了。其實都存在不同和相同的方式,當然楊冰【獨立制作人】【但作為單獨程序的責任需要把邏輯划分清楚,保證擴展】的那個是最值得學習, https://blog.csdn.net/u012999985/article/details/71056425。)

正文:

      (若關心元素實現,可以直接跳到實現部分)

 

額外說明

 

        因為游戲關於這個,一來都是大佬意見和看法,小道只能總結和實現(游戲都沒玩過上百通關的,不敢發表看法)

獨立游戲開發界: <https://www.bilibili.com/video/av5199528/> ,結論:反饋。

元素

  (查看作者知乎:Meta42 來自 <https://www.zhihu.com/question/20344728> )

  我們只要把下面所有要素都處理好了,游戲的戰斗就有打擊感了么?此顏差矣。《孫子兵法》曾經曰過“備前則后寡,備后則前寡;備左則右寡,備右則左寡;無所不備,則無所不寡”,(扯淡的嘿嘿)

  • 攻擊動作與受擊動作
  • 特效
  • 傷害數字
  • 連擊與連擊計數
  • 頓幀
  • 慢動作(應該叫局部慢時間。可以到鐵拳,火影這些)
  • 鏡頭震動
  • 鏡頭模糊
  • 視角切換
  • 音效

  (以下小道亂說)

  關鍵是需要的重點,打擊感對於游戲,就像金錢對於生活,只是手段,而不是目的

  有滿屏傷害數字的(打打咚噠噠噠咚咚咚咚【爆】,嘿嘿)加上連擊,頓幀,切特殊鏡頭的【崩,火】

  有一丟都沒數值的,用鏡頭收縮、特效、頓或延時幀來的(啪啪噗---(滿)---爆-頓-爆)【鬼,獵】

  有物理動作,加上動作緩慢的和硬直切換的。(啪嗒-哦-啪啪啪,哈哈)【騎馬】

  (關於網絡同步走的,其實也不能一概否,黑色沙漠,還有逆水寒(技術真的好,別罵小道)這些也有看到的)

 

  綜上就出現:、天朝、歐美,日韓幾種方式,再加上理論和實踐,結果就是一句緣分。【意會意會】

 

實現元素前的說明

 

(原文: <http://gad.qq.com/article/detail/26109>,作者:波傑克Po,轉載自奶牛關游戲社區)

 

首先是基礎點(拋開這些東西后,打擊感就消失了):

  •  

操作的映射(准確性和符合預期性)

(電腦里的人物是玩家的肢體延伸,玩家的操作要即時有效),就好像你開車,像左打了方向,車就即時的向左拐。方向打多少就拐多大的角度。准確和符合預期才能正常的操作。如果往左打了一點點,汽車直接原地轉了3圈,或者隨機拐一個角度,你就完全不可控了。

前搖動作

(攻擊蓄力),沒有這部分,動作會顯得軟綿無力。

攻擊動作命中目標

(無論是動作還是特效,都得讓玩家意識到打中了目標),沒有這部分會顯得不真實。

受擊動作表現

(只要受擊瞬間的動作合理,打擊感就能出來),沒有這部分同樣會顯得不真實。

攻擊受擊同步

(主要是命中點和受擊點的同步),沒有這部分會顯得不真實。

【以上4點如果沒做到,最大的影響是不真實,就像一個瘦弱的人輕輕的摸了一下汽車,汽車等了2秒后被擊飛了老遠的那種感覺。因此要實現打擊感的第一點,是要成功的騙過玩家的大腦,讓他感受到真實感。像一個魔術師一般,上面的四點是絕不能讓玩家看出破綻的。】

其次是進階點(加進來可以讓打擊感更好):

 

  •  

命中標識的明顯化

(受擊動作是一個基礎的命中標識,但識別度還不夠高。)因此還需要誇張的受擊特效、身體的反白效果、受擊的傷害數字的冒出效果、受擊后抖動的效果、被擊退、被擊飛、被擊倒

環境效果

(強調一個攻擊力度的強弱,除了受擊方的表現,另外就是對周遭環境的影響),簡單有效的包含:震屏(震動頻率與動作匹配)、塵土特效(高速移動一定會帶來塵土飛揚的效果)

擊殺表現

(殺死目標代表了玩家完成了某個戰斗事件,這時候應該給予玩家獎勵信息),因此怪物的死亡特效死亡動作要表現的足夠華麗。一定要大,要有爆點。

攻擊特效

(理論上可有可無,但有可以放大效果的表現)可以運用空間扭曲、身體模糊等效果來提升特效的檔次。切忌不要喧賓奪主,主體是動作和受擊特效,攻擊特效一定要讓步。

音效

(實際音效的只能放大已有的打擊感,如果本身沒有打擊感,音效並無大作用)就算完全沒音效,依舊可以表現出良好的打擊感。特別注意的是,有的情況下一定要和動作切合,和武器材質貼合。

 

第三是高階點(真正動作游戲向的內容,頓幀、硬直、打斷、動作的多樣性、鏡頭、全屏動畫表現)

  •  

頓幀

攻擊方命中目標后,攻擊方動作、特效,受擊方動作、特效,短暫暫停的表現效果。真正動作向的游戲不可跳過的一部分。注意受擊方的頓幀表現並非必須的,而是因為頓幀時無法進行其它操作,因此受擊頓幀可以用來延長受擊硬直的時間。

硬直

分為攻擊硬直和受擊硬直。攻擊硬直里又分為前搖和后搖。硬直時間是指進入某一狀態后,玩家不可操作打斷的時間。(如一個攻擊動作共4秒,前搖2秒后搖2秒,命中是瞬間的事情。后搖1秒后允許移動OR技能打斷。這時候攻擊硬直時間為3秒,若玩家主動移動OR技能打斷,則時間短;若玩家不操作,任由技能表現放完,則需要4秒。)

打斷

在目標攻擊前搖結束前,即傷害產生前攻擊目標,使目標進入受擊狀態。(同樣是上面的例子,假設A攻擊前搖2秒,B攻擊前搖1秒,B看到A施放攻擊,並按下技能攻擊B,這時候的時間若在1秒前,則B命中A,打斷成功,A進入受擊。若在1秒后,則A命中B,打斷失敗,B進入受擊。)

動作多樣性

這部分決定了戰斗的華麗性。單一的武器單一的攻擊方式,會讓戰斗變得單調。動作多樣性足夠多,就可以打出各種各樣的連招組合。(也是為什么格斗游戲單一鍵位對應單一動作,組合鍵位對應復雜動作,更多的組合鍵對應各種大招。如果每個按鍵對應一個大招就沒什么多樣性可言了。)

鏡頭

根據技能,主要是大招的施放節奏,鏡頭的轉化和縮放能更好的突顯出大招的威力。聚集能量的時候縮,施放傷害的時候放。(小道解釋這就是為啥,技能要有個技能Sys對吧)

全屏動畫表現

類似火影究極風暴。施放忍術大招的時候,會用一個全屏動畫來代替(動畫本身設計的決定了好壞)攻擊前搖的部分,動畫結束時播放命中目標的特效。想到與一個超級蓄力動作,蓄力那么久,威力必然大。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

不知理則久崩,我們不能一直都是對着源碼CC+CV,對着復制到用時時間翻倍或沒頭緒(這取舍,得心里明白)。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

實現:

(因為是篇是打擊,所以只說打擊相關。連招緩存,和連招的程序切換【其實就是個動態修改了Next索引罷了】等都不在這里說明)

 

基於Unreal,Unity,Cocos 【這里就Unreal,藍圖方便說明而已】【稍后找找之前的 給上來,完全個人不怕那啥,嘿嘿】

(原因:

 

 

 

第一步:

目的:要到數據

1、AnimationNotify(動畫通知):當動畫局部時間經過通知的時刻,或進入通知的時間區域時候觸發通知。

(通知邏輯,其實大部分是可以轉到C++,為何要轉,具體看優化部分說明)

(這里插入一點注意:如果進入通知時刻全局timescale=0或者動畫的timescale=0,然后再開啟,會如何?答案:會觸發兩次,為何?你懂的)

(關於通知的使用其實大可以發掘和擴展:但注意一點,邏輯耦合)

(這里有一個分享也可以看看:作者張瀚榮來自 <https://blog.csdn.net/OnafioO/article/details/78051971> ,當然是否盒子類碰撞檢測和射線看具體)

 

2、HitCheck(傷害區域判定)

 

 

這里解決傷害區域判定:

攻擊方:

2.1、利用掛在人物上的Box,加上通知區域(實現Transform相對數據變化)

2.2、碰撞發生時是攻擊方否為有效時間段:

 

 

(都只是標志緩存,可以放到角色上,也可以放到動畫藍圖上。但肯定有個統一的接口:因為實現會變化,和加入外部條件)

受擊方:

2.3、最基礎的做一個打開傷害,為何?(真實或者誇張下,傷害沒有瞬間多次,當然這里也可以不用通知直接處理。

 

 

上述最后,我們可以做到數據變化上,然后根據需要做外部接口(這樣還有機會繼續優化和擴展).懶,就直接訪問

 

第二步:

目的:得到數據,做對應的處理而已(這里可以做到對象上,也可以是對象的某一組件上

【分出到自定義的上做也可以,覺得放到自定義上,然后在組合的OB上,做個表對象映射是挺好的選擇。便於擴展和配置】

 

 

 

第三步:

就是元素的單個實現:

A

攻擊受擊同步


 這里就是檢測而已,取到對應點或者面。命中

B

命中標識的明顯化

 

1、特效:在對應位置和面上播放

 

2、反白:人物Hit組件(自定義一個,或者就Role做),但注意下因為反白會多次,會消失,

所以最好單獨就是個效果Obj,這樣處理消失和效果時間疊加減少,和判斷其他都容易和清除,也不影響其他)。

大部分是人物Mesh,做動態材質屬性變化( createDynamicMateria,使用前判斷有無,沒有創建,有則修改)

進入(入和出成對)

 

恢復

 

 

 

 

3、計算需要的數據,力,類型等效果值

 

 

 

 

4、進入到傷害動畫

 

 

 

5、頓幀、硬值、打斷

做之前吧頓幀時間,硬直時間,打斷時間都計算好。根據配置做頓幀、硬值、打斷開關處理

 

 

 

    

頓幀:

(攻擊方命中目標后,攻擊方動作、特效,受擊方動作、特效,短暫暫停的表現效果)

 

 

 

 

 

硬直:

(硬直時間是指進入某一狀態后,玩家不可操作打斷的時間。)

 

 

 

力表現:(只是測試,就直接Tween. 若是開物理可以物理, (懶就TW和給力),最恰當得自己封裝一個Item模擬)

 

 

 

鏡頭:

UE有幾種做動畫的方式。

1

CameraShake對象,其中包含了Anim:

1、用RotOscillation,LocOscillation,FOVscillation實現

2、用Anim實現

 

 

3、打開CameraShake,藍圖做

EventReceivePlayShake D Scale0 〈>EventReceiveStopShake D Immediately" v:shapes="圖片_x0020_20">

 

 

 

 

(以上都可轉C++,這里懶就表下)

 

全局時間和局部時間

 

 

 

以上為大體的使用實現,這里只是擊中后時刻做的實現。動畫多樣性,前后搖動作(后面補上挺雜的,得找找嘿嘿)

 

 

備注

CSDN:https://blog.csdn.net/u012999985/article/details/71056425

知乎:  https://www.zhihu.com/question/20344728

GAD:http://gad.qq.com/article/detail/26109、 <https://blog.csdn.net/OnafioO/article/details/78051971>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM